R项目中的数据操作:比较行

时间:2014-02-03 02:29:34

标签: r

我希望比较数据集中的值

每一行都以唯一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行的有效方法......

1 个答案:

答案 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