在R中对值进行子集化时,保持数据帧大小不变

时间:2013-02-23 15:44:44

标签: r dataframe subset

我希望通过删除值来对数据框进行子集化,但不删除任何列。

示例

> 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

1 个答案:

答案 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值。