我们有一个简单的数据框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
谢谢!
答案 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), ]
推荐第一个。