2014-01-09 84 views
20

說我有一個data.frame:如何從data.frame中提取單個列作爲data.frame?

df <- data.frame(A=c(10,20,30),B=c(11,22,33), C=c(111,222,333)) 
    A B C 
1 10 11 111 
2 20 22 222 
3 30 33 333 

如果我選擇兩個(或更多)列我得到一個data.frame:

x <- df[,1:2] 
    A B 
1 10 11 
2 20 22 
3 30 33 

這就是我想要的。不過,如果我只選擇一個專欄中,我得到一個數值向量:

x <- df[,1] 
[1] 1 2 3 

我曾嘗試使用as.data.frame(),它不會改變結果的兩個或多個列。它在一列的情況下返回data.frame,但不保留列名:

x <- as.data.frame(df[,1]) 
    df[, 1] 
1  1 
2  2 
3  3 

我不明白爲什麼它的行爲這樣。在我看來,如果我提取一個或兩個或十個列,應該沒有什麼不同。 IT應該總是返回一個向量(或矩陣),或者總是返回一個data.frame(使用正確的名稱)。我錯過了什麼?謝謝!

回答

43

使用drop=FALSE

> x <- df[,1, drop=FALSE] 
> x 
    A 
1 10 
2 20 
3 30 

從文件(見?"[")你可以找到:

如果drop = TRUE,結果被強制在可能的最低層面。

17

略去,

x <- df[1] 

    A 
1 10 
2 20 
3 30 

?"["幫助頁面:

索引由[類似於原子向量,並選擇指定的元素(一個或多個)的列表。

數據框是一個列表。列是它的元素。

相關問題