使用多个条件在R中对数据帧进行子集化的有效方法

use*_*120 1 r subset

是否有更清晰,更有效的方法使用多个条件对R中的数据帧进行子集?这是我的简化示例.包含一式三份的列(v1,v2,v3和v4,v5,v6)每行一式三份可包含最多一个0值,否则应排除:

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
Run Code Online (Sandbox Code Playgroud)

这是我解决问题的简单方法.

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
Run Code Online (Sandbox Code Playgroud)

Hub*_*rtL 5

您可以使用rowSums在任何3个第1列和最后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
Run Code Online (Sandbox Code Playgroud)