我有一个像这样的数据框:
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.
我该怎么办?
使用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 <- 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列满足!= ''
条件的条件。