【发布时间】:2018-07-13 13:21:02
【问题描述】:
我在这个问题Compare every 2 rows and show mismatches in R有类似的问题
我不仅想比较 2 行,还想比较 3、4 等。 我这里有一个 data.table:
DT <- data.table(A = rep(1:2, 2), B = rep(1:4, 2),
C = rep(1:2, 1), key = "A")
然后我用
dfs <- split(DT, DT$A)
comp <- function(x) sapply(x, function(u) u[1]==u[2])
matches <- sapply(dfs, comp)
对于 3 行:
comp <- function(x) sapply(x, function(u) u[1]==u[2] & u[1]==u[3])
准确吗?如何以更优雅的方式概括它?
【问题讨论】:
-
为什么要按
A列拆分数据? -
除了 stas 的问题之外,这里的“比较”是什么意思还不清楚。如果你除以 A,当然每个 df 中 A 的每个值都将相同,因此该行保证为 TRUE。如果你想通过 A 检查每列的唯一性,有 ...
DT[, lapply(.SD, function(x) uniqueN(x) == 1L), by=A] -
感谢您的回答。我想按 A 拆分,作为我需要拆分数据的某些 ID 的示例。我想检查每列的唯一性(或重复性)。但是,如果 B 中的所有值都相同,则为 TRUE,如果至少有一个不同则为 FALSE。
-
我还对数据集进行了一些编辑,因为当你按 A 拆分时,仍然会有 3 行要比较。
-
预期输出:` 1 2 A TRUE TRUE B FALSE FALSE C TRUE TRUE`
标签: r data.table compare rows