2011-12-15 107 views
3

我做了大量的使用Google搜索,但我沒有找到令人滿意的解決方案,我的問題。 假設我們有以下數據文件:閱讀R中的多維組數據

 
Tag v1 v2 v3 
A 1 2 3 
B 1 2 2 
C 5 6 1 
A 9 2 7 
C 1 0 1 

第一行是標題。第一列是Group id(數據有3個組A,B,C),而其他列是值。 我想在R中讀取這個文件,以便我可以在數據上應用不同的函數。 例如,我試圖讀取該文件,並試圖讓列是什麼意思

dt<-read.table(file_name,head=T) #gives warnings 
apply(dt,2,mean) #gives NA NA NA 

我想讀這個文件,並希望得到列是什麼意思。然後我想分開3組數據(根據標籤A,B,C),並且想要計算每個組的平均值(列明智)。任何幫助

+0

開始用STR(DT)檢查數據,如果所有的人都因素,然後嘗試類似:DT1 = cbind(DT [1],data.frame(申請(DT [2:4],2,as.numeric)));然後你可以嘗試諸如dt [dt $ Tag == A]之類的東西來創建單獨的組,或者使用像tapply這樣的東西:tapply (dt1 $ v1,INDEX = dt1 $ Tag,mean)得到列式函數 – aatrujillob 2011-12-15 12:07:33

+0

只記得R的一個陷阱:如果一個向量是一個因子,則必須使用as.numeric(as.character(factor_vector)),否則沒有得到你想要的。 – 2011-12-15 12:28:26

回答

2

apply(dt,2,mean)不起作用,因爲apply脅迫通過as.matrix的第一個參數數組(如在?apply詳細信息部分的第一段陳述)。由於第一列是字符,被強制矩陣對象中的所有元素都將是字符。

試試這個:

sapply(dt,mean) # works because data.frames are lists 

要計算列是指羣體:

# using base functions 
grpMeans1 <- t(sapply(split(dt[,c("v1","v2","v3")], dt[,"Tag"]), colMeans)) 
# using plyr 
library(plyr) 
grpMeans2 <- ddply(dt, "Tag", function(x) colMeans(x[,c("v1","v2","v3")]))