2012-08-23 120 views
6

我正在嘗試過濾只有一列的數據幀。這導致載體返回像這樣:過濾單列數據幀

single.c <- data.frame(col1=c(1,2,3,4,5), row.names=C("r1","r2","r3","r4","r5")) 
single.c[single.c$col1 > 2,] 

[1] 3 4 5 

我真正想要的是像它傳回的數據是多列dataframes:

multi.c <- data.frame(col1=c(1,2,3,4,5), col2=c(1,2,3,4,5), row.names=c("r1","r2","r3","r4","r5")) 
multi.c[multi.c$col2 > 2,] 

    col1 col2 
r3 3 3 
r4 4 4 
r5 5 5 

我可以看到它是有道理的返回向量如果沒有其他列,但通常我想看看哪些行也給出了結果。爲什麼會發生這種情況,並且是否有一種簡單的方法來保持結果中的數據框架形狀,包括rownames?

回答

10

使用drop參數選擇功能:

single.c[single.c$col1 > 2, ,drop=F] 

# col1 
#r3 3 
#r4 4 
#r5 5 

從文檔[

對於矩陣和陣列。如果爲TRUE,則結果被強制爲最低的 可能維度(請參閱示例)。這僅適用於提取 元素,而不是用於替換。請參閱drop瞭解更多詳情。

+3

謝謝,我不知道有文件列在'?'[''! – MattLBeck

+2

好東西!我一直想知道如何通過從現有的data.frame中提取單個列來獲取data.frame!我一直在使用data.frame(col1 = multi.col $ col1,row.names = rownames(multi.col))來做同樣的事情!衛生署! –