2013-01-18 47 views
0

我有以下建立一個數據框。我的問題是數據框的行名顯示爲[1,],[2,],[3,],[4,]等,而不僅僅是1,2,3,4等(見下面的輸出) 。爲什麼以及如何解決這個問題,讓我的行名像往常一樣顯示(遞增的數字)。R數據幀的行名顯示矩陣而不是數值

Code: 

df <- data.frame(id=c("id"),nobs=c("nobs")) 
df <- cbind(id,nobs) 
df 

ID和NOBS是兩個矢量與每個5個數值...

Current output: 
    id nobs 
[1,] 2 3653 
[2,] 4 3653 
[3,] 8 1462 
[4,] 10 1097 
[5,] 12 732 

Desired output: 
    id nobs 
1 2 3653 
2 4 3653 
3 8 1462 
4 10 1097 
5 12 732 

回答

0

注意:我不建議您使用這兩種方法中的任何一種。如果你想要一個data.frame,你可以直接創建它,就像Paul展示的那樣(或者你自己完成了)。這只是爲了說明發生這種情況的原因。雖然有時例如使用sapply時,輸出將是一個矩陣,您可能想要綁定2個這樣的矩陣並將它們作爲data.frame

從幫助頁面cbind?cbind):

功能cbind和rbind是S3通用的,與數據幀的方法。如果至少有一個參數是數據幀,其餘的是矢量或矩陣,則將使用數據幀方法。

數據幀的方法

的cbind數據幀的方法僅僅是data.frame一個包裝(...,check.names = FALSE)。這意味着它將拆分數據框參數中的矩陣列,並將字符列轉換爲因子,除非指定了stringsAsFactors = FALSE。

所以,如果你傳遞兩個向量,data.frame的包裝將不會被調用。因此,你獲得一個矩陣。

你能做什麼?
1)可以創建並傳遞至少一個data.frame參數cbind
2)包住cbind參數以一個as.data.frame(.)

x <- 1:5 
y <- 6:10 
> cbind(data.frame(x), y) 
    x y 
1 1 6 
2 2 7 
3 3 8 
4 4 9 
5 5 10 

> as.data.frame(cbind(x,y)) 
    x y 
1 1 6 
2 2 7 
3 3 8 
4 4 9 
5 5 10 
+0

謝謝Arun!這很有幫助。我是R新手,現在我看到內置幫助實際上是如何有用的。我懷疑它,但只是不確定。另外,如果我沒有,對不起 –

4

你的第二命令完全覆蓋第一。你想要的是

df <- data.frame(id=id, nobs=nobs) 

由於您的輸入cbind的載體(我相信),則默認情況下它返回一個矩陣。

此外,你可以通過

df <- data.frame(cbind(id, nobs)) 

迫使它作爲一個數據幀,但是這是矯枉過正。

+1

1對於推薦使用data.frame的'()'直接。當沒有必要的時候,太多人被吸引進使用'cbind'構建數據框的漩渦中,並且通常會引起問題。 – joran

+0

謝謝保羅。這工作,我現在明白了更好。另外,如果我沒有選擇你的答案,對不起。我剛從阿倫那裏看到的第一張。 –