2017-08-02 7 views
0

私は異なる名前の複数の列を持っている行列を持っていますが、それらのいくつかは同じで、それらをまとめてグループ化し、それらの列の平均をとってみたいと思います。基本的には2つの異なる列の値を同じ名前で組み合わせるにはどうすればよいですか?

、私は上記の行列は、私は、各列の平均値を取得する予定ですその後、この

Lung Heart Kidney Liver 
3  1  8  15 
7  2  9  17 
9  1  12 19 

に見えるようにしたい

Lung Lung Lung Heart Heart Heart Kidney Kidney Kidney Liver Liver Liver 
3  7 9  1  2  1  8  9  12  15 17 19 

(肺、心臓など)

したがって、同じ名前を持つ列の平均を計算するコードを組み合わせても、それを提案しても問題ありません。

答えて

2

変数名を追加するために私たちはここでsplit

data.frame(lapply(split.default(df1, names(df1)), unlist, use.names = FALSE)) 
# Heart Kidney Liver Lung 
#1  1  8 15 3 
#2  2  9 17 7 
#3  1  12 19 9 
1

を使用することができます列に値を整理するmatrixと方法があるとsetNames。これには、同じ名前の変数が同じサイズで隣接していることが必要であることに注意してください。

setNames(data.frame(matrix(unlist(dat), 3)), unique(names(dat))) 
    Lung Heart Kidney Liver 
1 3  1  8 15 
2 7  2  9 17 
3 9  1  12 19 

また、これは質問で提示構造であるため、この解決策は、data.frameではなく、行列で動作しますが、同じコードが任意の変更なしにマトリックスで動作します。

データ

dat <- 
structure(list(Lung = 3L, Lung = 7L, Lung = 9L, Heart = 1L, Heart = 2L, 
    Heart = 1L, Kidney = 8L, Kidney = 9L, Kidney = 12L, Liver = 15L, 
    Liver = 17L, Liver = 19L), .Names = c("Lung", "Lung", "Lung", 
"Heart", "Heart", "Heart", "Kidney", "Kidney", "Kidney", "Liver", 
"Liver", "Liver"), class = "data.frame", row.names = c(NA, -1L 
)) 
関連する問題