在R中的特定条件下筛选数据集

在R中的特定条件下筛选数据集,r,filter,conditional-statements,R,Filter,Conditional Statements,我有一个如下结构的数据帧: V1 V2 V3 V4 V5 V6 V7 A. B. C. D. E. C C. D. K. A. B. C. D. E. F. G. 有空单元格的地方 我想根据以下条件过滤数据帧: 对于数据帧的每一行,如果在列V4、V5、V6、V7中至少有两个值不同于空白值,则取该行。否则,请删除它 V1 V2 V3 V4 V5 V6 V7 A. B. C. D. E. A. B. C.

我有一个如下结构的数据帧:

 V1 V2 V3 V4 V5 V6 V7 

 A. B. C.    D.    E. 
 C  C. D.    K.             
 A. B. C. D. E. F. G. 
有空单元格的地方

我想根据以下条件过滤数据帧:

对于数据帧的每一行,如果在列V4、V5、V6、V7中至少有两个值不同于空白值,则取该行。否则,请删除它

 V1 V2 V3 V4 V5 V6 V7 

 A. B. C.    D.    E.     
 A. B. C. D. E. F. G. 

我该怎么做?

您可以对数据帧进行子集,首先设置一个索引,为每列求和一个逻辑运算符,如下例所示:

df <- data.frame(V4 = c('A', '', 'C'),
                 V5 = c('A', '', 'C'),
                 V6 = c('A', 'B', ''))

  V4 V5 V6
1  A  A  A
2        B
3  C  C   

df <- df[(df$V4 != '') + (df$V5 != '') + (df$V6 != '') >= 2, ]

当对逻辑运算符求和(测试变量是否为空“”)时,它们生成一个表示找到的真值数的数值。在您的示例中,您希望设置至少有2列满足
!=''的条件条件。

您可以对数据帧进行子集,首先设置一个索引,对每列的逻辑运算符求和,如下例所示:

df <- data.frame(V4 = c('A', '', 'C'),
                 V5 = c('A', '', 'C'),
                 V6 = c('A', 'B', ''))

  V4 V5 V6
1  A  A  A
2        B
3  C  C   

df <- df[(df$V4 != '') + (df$V5 != '') + (df$V6 != '') >= 2, ]

当对逻辑运算符求和(测试变量是否为空“”)时,它们生成一个表示找到的真值数的数值。在您的示例中,您希望设置至少有2列满足
!=''的条件条件。

使用
行和

df[rowSums((df!='')[,c('V4','V5','V6','V7')])>=2,]
  V1 V2 V3 V4 V5 V6 V7
1 A. B. C.    D.    E.
3 A. B. C. D. E. F. G.

使用
rowSums

df[rowSums((df!='')[,c('V4','V5','V6','V7')])>=2,]
  V1 V2 V3 V4 V5 V6 V7
1 A. B. C.    D.    E.
3 A. B. C. D. E. F. G.

你能详细说明一下吗?我不明白,你的具体情况是什么。关于
df[apply(df[,c(“V1”,“V2”,“V3”,“V4”)],1,函数(行)长度(唯一的(行[nchar(行)>0]))>2),]
你能详细说明一下吗?我不明白,您的具体情况是什么。关于
df[apply(df[,c(“V1”,“V2”,“V3”,“V4”)],1,函数(行)长度(唯一(行[nchar(行)>0]))>2),]