2013-02-23 44 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

相關問題