2012-04-06 39 views
9

通常當你得到一個列時,它是一個向量。我怎樣才能保持它作爲data.frame具有相同的行名稱和相應的列名稱?如何從data.frame中將每個列作爲data.frame(而不是一個向量)?

+0

[1維矩陣更改爲R中的向量]的可能副本(http://stackoverflow.com/questions/9949202/1-dimensional-matrix-is-changed-to-a-vector -in-r) – joran 2012-04-06 19:08:20

+0

@joran對不起,沒有看到可能的重複。我會留下我的迴應,如果這個問題已經結束,我的回答是一個有爭議的問題。 – 2012-04-06 19:10:45

+0

@TylerRinker別擔心。這只是一個很常見的問題,就是這樣。 – joran 2012-04-06 19:35:32

回答

13

而不是調用用逗號即data.frame [,I]使用data.frame [I]所期望的柱以保留類作爲data.frame和還保留行的名稱。

data.frame[,i] #As a vector 
data.frame[i] #As a data.frame 
+0

不錯,我不知道你可以這樣做+1 – 2012-04-07 13:45:11

+0

我想爲我的問題帖子增加一些價值,並且不應該被關閉:) – RNA 2012-04-08 00:02:59

5

使用參數下降= FALSE爲:

mtcars[, 1, drop = FALSE] 
0

如果子集劃分一個data.frame時指定一個號碼,你會得到一列data.frame。這與矩陣子集化不同,後者需要「缺失」參數來返回整個列(然後將其轉換爲矢量)。

# mtcars is a data.frame 
mtcars[1]  # first column 
str(mtcars[1]) # is still a data.frame 
# 'data.frame': 32 obs. of 1 variable: 
# $ mpg: num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ... 
# MTCARS is a matrix 
MTCARS <- as.matrix(mtcars) 
as.matrix(MTCARS)[1]  # only the first element 
# [1] 21 
str(as.matrix(MTCARS)[,1]) # the first column, as a vector 
Named num [1:32] 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ... 
- attr(*, "names")= chr [1:32] "Mazda RX4" "Mazda RX4 Wag" "Datsun 710" ... 
相關問題