2011-12-15 11 views
3

私は多くのグーグルでやったことがありますが、私の問題は満足のいく解決策が見つかりませんでした。最初の行はヘッダーですRの多次元グループデータを読む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 

: は、私たちのように、データファイルを持っていると言います。最初の列はグループ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による)でデータを分離し、各グループの平均(列方向)を計算したいと考えています。 applyas.matrixを経由して、配列の最初の引数を(?applyの詳細セクションの最初の段落に記載されているよう)強制的に変換するので、任意の助け

+0

開始STR(DT)とのデータをチェックしてすることは、その後のようなものを試してみてください= cbind(dt [、1]、data.frame(apply(dt [、2:4]、2、as.numeric))); colnames(dt1)= c( 'Tag'、 'v1'、 'v2'、 'v3')次に、dt [dt $ Tag == A]のようなものを試して、別々のグループを作成したり、 (dt1 $ v1、INDEX = dt1 $ Tag、mean)列方向の関数を取得する – aatrujillob

+0

Rの問題を覚えておいてください。ベクトルが要素の場合、as.numeric(as.character(factor_vector))を使用する必要があります。あなたが望むものを手に入れません。 –

+0

@AndresT - ありがとうございます。ちょっとした誤字。 x <-dt1 [dt1 $ Tag == 'A'、]でなければなりません。しかし、単にxの行番号を取り除く方法が不思議です。これは、新しい値を持っていますが、行番号は1と4 xは、次のとおりです。 タグのV1 V2 V3を
1 A 1 2 3

答えて

2

apply(dt,2,mean)は動作しません。最初の列は文字なので、強制的な行列オブジェクトのすべての要素は文字になります。

代わりにこれを試してみてください:

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

を列を計算するにはグループによって意味:DT1:それらのすべてが要因である場合

# 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")])) 
+0

問題は適用されません(dt、2、平均)。これはまさに例です。特定のグループに機能を適用できるように、異なるマトリックスのタグに従ってデータを分離したい。 –

+0

上記のコードの2行目に示す 'split'構文を使用してください... –

関連する問題