使用单独的列计算数据帧行组合和匹配

时间:2016-06-02 16:24:42

标签: r

我试图将数据帧的所有组合(每个组合根据总和减少到1或0)与另一列匹配并计算匹配。我一起攻击了这个,但我觉得有一个更好的解决方案。有人可以提出更好的方法吗?

library(HapEstXXR)
test<-data.frame(a=c(0,1,0,1),b=c(1,1,1,1),c=c(0,1,0,1))
actual<-c(0,1,1,1)

ps<-powerset(1:dim(test)[2])
lapply(ps,function(x){
    tt<-rowSums(test[,c(x)]) #Note: this fails when there is only one column
    tt[tt>1]<-1 #if the sum is greater than 1 reduce it to 1
    cbind(sum(tt==actual,na.rm=T),colnames(test)[x])
})

> test
  a b c
1 0 1 0
2 1 1 1
3 0 1 0
4 1 1 1

目标:将列的所有组合(顺序无关紧要)与实际列进行比较,并查看哪些匹配

b c a  ab ac bc abc actual
1 0 0  0  0  0  0      0
1 1 1  1  1  1  1      1
1 0 0  0  0  0  0      1
1 1 1  1  1  1  1      1

匹配:

a: 3
b: 3
c: 3
ab: 3
....

1 个答案:

答案 0 :(得分:0)

你的代码对我来说似乎很好,我只是稍微简化了一下:

sapply(ps,function(x){
    tt <- rowSums(test[,x,drop=F]) > 0
    colname <- paste(names(test)[x],collapse='')
    setNames(sum(tt==actual,na.rm=T), colname) # make a named vector of one element length
})

#  a   b  ab   c  ac  bc abc 
#  3   3   3   3   3   3   3