【问题标题】:filter a dataset under specific conditions in R在 R 中的特定条件下过滤数据集
【发布时间】:2019-08-16 22:14:05
【问题描述】:

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

 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[apply(df[,c("V1", "V2", "V3", "V4")], 1, function(row) length(unique(row[nchar(row) > 0])) > 2),]怎么样

标签: r filter conditional-statements


【解决方案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.

【讨论】:

    【解决方案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, ]
    

    输出

      V4 V5 V6
    1  A  A  A
    3  C  C  
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-07
      • 1970-01-01
      • 1970-01-01
      • 2022-09-29
      • 2012-07-06
      相关资源
      最近更新 更多