我希望比较数据集中的值
每一行都以唯一ID开头,后跟一对二进制变量 数据如下所示:
row.name v1 v2 v3 ...
1 0 0 0
2 1 1 1
3 1 0 1
我想知道哪些值是相同的(如果相等的赋值为1),并且对于所有唯一配对,哪些值是不同的(如果不等于赋值0)。 例如,在第v1列:row1 == 0和row2 == 1,这将导致赋值为0.
因此,输出应该如下所示
id1 id2 v1 v2 v3 ...
1 2 0 0 0 ...
1 3 0 1 0 ...
2 3 1 0 1 ...
我正在寻找一种超过1000行的有效方法......
答案 0 :(得分:2)
如果不扩展每个行组合,就没有办法做到这一点,所以1000行,这需要花费一些时间。但这是一个解决方案:
dat <- read.table(header=T, text="row.name v1 v2 v3
1 0 0 0
2 1 1 1
3 1 0 1")
创建索引行:
indices <- t(combn(dat$row.name, 2))
colnames(indices) <- c('id1', 'id2')
遍历索引行,并收集比较:
res1 <- t(apply(indices, 1, function(x) as.numeric(dat[x[1],-1] == dat[x[2],-1])))
colnames(res1) <- names(dat[-1])
把它们放在一起:
result <- cbind(indices, res1)
result
## id1 id2 v1 v2 v3
## [1,] 1 2 0 0 0
## [2,] 1 3 0 1 0
## [3,] 2 3 1 0 1