在R中的特定条件下过滤数据集

问题描述 投票:0回答:2

我有一个像这样的数据框:

 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. 

我该怎么办?

r filter condition
2个回答
1
投票

使用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.

1
投票

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

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, ]

产量

  V4 V5 V6
1  A  A  A
3  C  C  

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

© www.soinside.com 2019 - 2024. All rights reserved.