2017-08-02 72 views
0

我有一个矩阵有多个不同名称的列,但其中一些是相同的,我想将它们组合在一起,然后取这些列的平均值。如何将两个不同列中的值与相同的名称组合起来?

基本上,

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

我想上面的矩阵看起来像这样

Lung Heart Kidney Liver 
3  1  8  15 
7  2  9  17 
9  1  12 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 
)) 
相关问题