2016-11-22 76 views
1

使用多个条件在R中对数据帧进行子集化是否有更清晰和更有效的方法? 这是我简化的例子。含一式三份列(V1,V2,V3和V4,V5,V6)可以包含每行一式三份内最大一个0值,否则应排除:使用多个条件在R中对数据帧进行子集化的有效方法

v1 v2 v3 v4 v5 v6 
1 0 3 0 0 2 
1 1 1 1 2 0 
0 0 0 1 1 0 
0 0 0 0 0 0 

这是我接近问题的简单方法。

data_short<-subset(data, (((v1 != 0 & v2 !=0) | (v1 != 0 & v3 !=0) | (v2 != 0 & v3 !=0)) & ((v4 != 0 & v5 !=0) | (v4 != 0 & v6 !=0) | (v5 != 0 & v6 !=0))) 

v1 v2 v3 v4 v5 v6 
1 1 1 1 2 0 
+2

'DF [rowSums(DF [1:3] == 0)<= 1&rowSums(df [,4:6] == 0)<= 1,]' – HubertL

回答

5

可以使用rowSums计数在任何3个的第一和最后3列中的数据为0的时间数量:

df <- read.table(text="v1 v2 v3 v4 v5 v6 
1 0 3 0 0 2 
1 1 1 1 2 0 
0 0 0 1 1 0 
0 0 0 0 0 0", header=TRUE) 

df[rowSums(df[,1:3]==0)<=1 & rowSums(df[,4:6]==0)<=1,] 

    v1 v2 v3 v4 v5 v6 
2 1 1 1 1 2 0 
+0

谢谢,它完成这项工作! – user2904120

相关问题