2013-02-23 39 views
0

我想通过删除值而不删除任何列来对数据框进行子集。当R中的子集值保持数据帧大小不变时

> 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

你实际上并不想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值。

+1

摆脱这一切,因为它没有在这里做任何事 – hadley 2013-02-23 15:50:23

+0

@hadley也许不在这里,但如果df [1,] <= 2的结果是NA呢? – agstudy 2013-02-23 15:52:31

+0

@hadley ..我相信'哪里'是必要的:D – 2013-02-23 15:54:18

相关问题