2015-09-23 53 views
0

這可能是一個非常基本的問題,但我有一個數據框,X與列名稱,數據框是所有數值,並且我試圖總結把所有的行,但是當我看行的一個使用查看R數據框對象中的每一行時出現的列標題

X[1,] 

敵人例子,它不僅返回第一行中的數值,而且每一列的名稱。所以這使得使用

rowSums(X[1,]) 

不可能,因爲它不能識別單元格作爲數值。

事實上,即使我看到單個細胞:

X[1,1] 

它與它一同返回該單元格的數值:

213 Levels: 1.505 1.545 1.57 1.6 1.61 1.62 1.63 1.64 1.68 1.69 1.7 1.72 1.725 1.73 1.75 1.76 1.78 1.83 ... 922472(P) 

所以,我真的不知道如何使它與數據幀一起工作更像是使用矩陣,我試過:

m<-as.matrix(X) 

但是這並不能解決我遇到的任何問題。

更新我不知道如何以最佳方式,由於其規模提供數據的例子,希望這是確定的:

prices.names[1:5,1:5] 
    AWE ADELAIDE.BRIGHTON RAMSAY.HEALTH.CARE AUS.AND.NZ.BANKING.GP. AMCOR 
1 1.8    1.7    7.0127     20.59 6.2342 
2 1.75    1.75    7.19     20.62 6.2935 
3 1.9    1.76    7.2491     20.34 6.2257 
4 1.79    1.72    7.0423     20.2 6.0815 
5 1.8    1.83    7.1014     20.55 6.0815 
+0

請向我們提供一個可重複的例子,現在大家都在猜測你一樣。 –

+1

請檢查您是否正確導入了您的數據。看起來他們是一個因素。 – Heroka

+0

@Heroka是的,他們是因素,爲什麼這樣做不正確?有沒有辦法將它轉換爲數值矩陣,但保留標題,例如:y <-matrix(as。數字(unlist(x)),nrow = nrow(x)),轉換爲numerica vlaues,但也刪除我想要的標題 – dimebucker91

回答

1

變換首先數字矩陣,如果你想保持總體結構,你可以試試這個:

prices.names <- sapply(prices.names, function(r) as.numeric(as.character(r))) 

如果你想有一個data.frame,無論如何,你可以在包裝上一次調用as.data.frame(),像這樣:

prices.names <- as.data.frame(sapply(prices.names, function(r) as.numeric(as.character(r)))) 

之後rowSums應該按預期工作:

> rowSums(prices.names[1,]) 
     1 
37.3369 


> rowSums(prices.names) 
[1] 37.3369 37.6035 37.4748 36.8338 37.3629 

> apply(prices.names,1,sum) 
[1] 37.3369 37.6035 37.4748 36.8338 37.3629 

你可以保存這個輸出對象,以及:

> rs <- rowSums(prices.names) 
> rs[1] 
[1] 37.3369 
> rs[2] 
[1] 37.6035 
> rs[3] 
[1] 37.4748 
> rs[4] 
[1] 36.8338 
> rs[5] 
[1] 37.3629 
1
Collection <- data.frame(A=seq(1,10), B=seq(11,20),C=seq(21,30)) 
rowSums(Collection[1,]) 

1 
33 

它給出了該行的行和名稱的總和。

雖然,

rowSums(Collection) 
[1] 33 36 39 42 45 48 51 54 57 60 

是你想要的嗎?

+0

當我嘗試將rowSums應用於行和整個數據框時,我得到的錯誤'x'必須是數字,有沒有辦法改變數據框中所有元素的類,目前它們都是因素,而在「收藏」中,它們是整數 – dimebucker91

+0

提供數據示例。當您使用read.table()或read.csv()(或類似的)時,我懷疑在您的數據輸入步驟中出現了這些因素。如果你使用參數,stringsAsFactors = FALSE你的因素應該消失。但是你很可能需要將得到的data.frame()的子集進行子集化,才能包含你試圖求和的數值。但沒有一個例子,我只是在猜測。 – user1945827

+0

好的,我更新了問題 – dimebucker91

相關問題