从所有条件中选择至少包含两个条件的行

时间:2016-03-02 13:04:45

标签: r

我在R中有这个数据框,我只需要选择至少符合以下两个条件的行:

  • A> = 5
  • B> = 5
  • C> = 5
  • D> = 5

              A         B         C         D
    1   0.000000 48.936170  0.000000 29.787234
    2   0.000000 72.340426  0.000000  6.382979 
    3   0.000000 78.723404  0.000000  2.127660
    4   2.127660 78.723404  0.000000  0.000000
    5   0.000000 43.617021  0.000000 35.106383
    6   0.000000 79.787234  0.000000  1.063830
    7   3.191489  0.000000 77.659574  0.000000
    8  77.659574  0.000000  2.127660  0.000000
    9  46.808511  0.000000  0.000000 31.914894
    10 35.106383  0.000000 27.659574  0.000000
    

我找到的唯一解决方案是使用“if”......

if ( ((data$A >=5) + (data$B >=5) + (data$C >=5) + (data$D >=5)) >=2 ) {

#result }

...但我找不到如何将if选择与我的数据框结合起来。 我试过这样但我似乎不是这个问题的解决方案:

Selection = data[if ( ((data$A >=5) + (data$B >=5) + (data$C >=5) + (data$D >=5)) >=2 ),]

提前感谢您的帮助,

1 个答案:

答案 0 :(得分:4)

您也可以

df <- read.table(header=T, text="         A         B         C         D
1   0.000000 48.936170  0.000000 29.787234
2   0.000000 72.340426  0.000000  6.382979 
3   0.000000 78.723404  0.000000  2.127660
4   2.127660 78.723404  0.000000  0.000000
5   0.000000 43.617021  0.000000 35.106383
6   0.000000 79.787234  0.000000  1.063830
7   3.191489  0.000000 77.659574  0.000000
8  77.659574  0.000000  2.127660  0.000000
9  46.808511  0.000000  0.000000 31.914894
10 35.106383  0.000000 27.659574  0.000000")
df[rowSums(df >= 5) >= 2, ]
#           A        B        C         D
# 1   0.00000 48.93617  0.00000 29.787234
# 2   0.00000 72.34043  0.00000  6.382979
# 5   0.00000 43.61702  0.00000 35.106383
# 9  46.80851  0.00000  0.00000 31.914894
# 10 35.10638  0.00000 27.65957  0.000000