首页 > 解决方案 > 如果指定的列小于或等于某个数字,则选择数据框行

问题描述

让我们有一个简单的数据框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

谢谢!

标签: rdataframesubset

解决方案


在两种失败情况下的修复:

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

推荐第一个。


推荐阅读