0

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

例子

> 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
4

1 回答 1

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在第一列中已经包含 s,<=则将返回一个NA可能不是您想要的。只要确保您使用的任何测试都不会返回NA值。

于 2013-02-23T15:45:26.173 回答