r-比较每n行并显示布尔向量



我有类似的问题,比如这个问题。每2行比较一次,并在R 中显示不匹配

我不仅想比较2行,还想比较例如3行、4行等。我这里有一个数据表:

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])

这准确吗?我怎样才能用更优雅的方式概括它呢?

试试这个:

comp2 <- function(dt, i, rws){
k <- length(rws)
tmp <- as.numeric(dt[i])
tmp <- as.data.table(matrix(rep(tmp, k), nrow = k, byrow = TRUE, dimnames = list(NULL, colnames(dt))))
ans <- (dt[rws] == tmp)
ans
}

此函数接受三个参数:->dt您的data.table(或从拆分原始数据中获得的子数据,由您决定(->i--要比较的行->rws—要将i与之进行比较的行号的矢量(例如,c(2,3,4)i与第2、3和4行进行比较然后它创建由行i堆叠k次组成的新的data.table,因此data.framedata.frame的比较是可能的。

示例:

comp2(DT, 1, c(2, 3, 4))
#       A     B     C
#[1,]  TRUE FALSE  TRUE
#[2,] FALSE FALSE FALSE
#[3,] FALSE FALSE FALSE

data.tableDT的第1行与第2、3和4行进行比较。

如果您希望您的输出告诉您所选的行是否与不同,则需要一个额外的操作colSums(ans) == k而不是ans

相关内容

  • 没有找到相关文章

最新更新