我希望通过删除值来对数据框进行子集化,但不删除任何列。
示例
> df <- as.data.frame(rbind(c(1,2,3,4,5,6, 1), c(4,5,6,7,3,0, 0)))
> df
V1 V2 V3 V4 V5 V6 V7
1 1 2 3 4 5 6 1
2 4 5 6 7 3 0 0
正如预期的那样,子集返回一个较小的数据框:
> df[which(df[1,] > 2)]
V3 V4 V5 V6
1 3 4 5 6
2 6 7 3 0
如何让子集返回以下数据框?
V1 V2 V3 V4 V5 V6 V7
1 NA NA 3 4 5 6 NA
2 NA NA 6 7 3 0 NA
答案 0 :(得分:4)
您实际上并不想subset
您的数据框,您只想删除某些列。所以只需反转which
命令中的逻辑..
df[ , df[ 1 , ] <= 2]
# and set all of _those_ values to NA
df[ , df[ 1 , ] <= 2] <- NA
# look at the result
df
注意:如果您的数据框在第一列中已包含NA
,则<=
将返回NA
,这可能不是您想要的。只要确保您使用的任何测试都不会返回NA
值。