如果指定的列小于或等于某个数字,则选择数据框行

时间:2018-07-12 13:02:50

标签: r dataframe subset

我们有一个简单的数据框df

A <- c(1,2,3,4)
B <- c(3,4,5,7)
C <- c(3,4,7,3)
df <- data.frame(A,B,C)
# A B C
#1 1 3 3
#2 2 4 4
#3 3 5 7
#4 4 7 3

我想在第2列和第3列(B,C)中提取一些值小于或等于4的行。如此理想的输出:

  A B C
1 1 3 3
2 2 4 4

我当然可以通过以下方式实现:

subset(df, df$B <= 4 & df$C <= 4)

df[df[,2] <= 4 & df[,2] <= 4,]

但是我有很多列,我想避免输入所有内容...

除此之外,为什么这两个解决方案不起作用?

df[df[,c(2,3)] <= 4,]


      A  B  C
1     1  3  3
2     2  4  4
NA   NA NA NA
NA.1 NA NA NA
NA.2 NA NA NA


df[apply(df [c('B','C')],1,function(x) x <= 4),]

    A  B  C
1   1  3  3
2   2  4  4
3   3  5  7
4   4  7  3
NA NA NA NA

谢谢!

1 个答案:

答案 0 :(得分:3)

在两种失败的情况下均已解决:

df[rowSums(df[, c(2,3)] <= 4) == 2,]  ## or df[rowSums(df[c(2,3)] <= 4) == 2,]
df[apply(df[c('B','C')] <= 4, 1, all), ]

推荐第一个。