2016-06-27 5 views
0

データの処理に問題があります。R:同じ名前の列を値の平均を取ってマージする

は、私はdata.frameを持って言う:

ind a b b c c c d 
1 0.1 0.2 0.2 0.3 0.5 0.7 0.9 
2 0.2 0.4 0.6 0.6 0.8 0.7 0.4 
... 

だから私は、処理した後、同じ名前の列が合併し、それらの平均値をとることになる欲しいです。 上記data.frameは次のようになります。あなたの読書と助けを

ind a b c d 
1 0.1 0.2 0.5 0.9 
2 0.2 0.5 0.7 0.4 
... 

感謝!!

+0

は疑問が言うようにそれは、行列であり、行列タグのように? – alistaire

+0

データを再現できるように 'dput()'でデータを共有してください。 'dput(head(your_data、4))'で十分です。そうすれば、それが 'matrix'か' data.frame'なのかどうかがわかります。それ以外の不正があれば、コードをコピーしてRセッションに貼り付けることができます。 – Gregor

+0

間違いをおかけして申し訳ありませんが、データ型はread.table()から直接取得されるdata.frameです。 –

答えて

0

これを行う最も良い方法は、それぞれが単一の列名に対応する列インデックスのセットを計算し、各セットで一度rowMeans()を実行することです。

split()colnames()に設定すると、列インデックスのセットをリストとして計算できます。 data.frameのために

sapply(split(seq_len(ncol(m)),colnames(m)),function(cis) rowMeans(m[,cis,drop=F])); 
##  a b c d ind 
## [1,] 0.1 0.2 0.5 0.9 1 
## [2,] 0.2 0.5 0.7 0.4 2 

:マトリックスについては

as.data.frame(lapply(split(seq_len(ncol(df)),colnames(df)),function(cis) rowMeans(df[cis]))); 
##  a b c d ind 
## 1 0.1 0.2 0.5 0.9 1 
## 2 0.2 0.5 0.7 0.4 2 

データ

df <- data.frame(ind=c(1L,2L),a=c(0.1,0.2),b=c(0.2,0.4),b=c(0.2,0.6),c=c(0.3,0.6),c=c(0.5,0.8 
),c=c(0.7,0.7),d=c(0.9,0.4),check.names=F); 
m <- as.matrix(df); 
関連する問題