我有一个矩阵,其中有多个列具有不同的名称,但其中一些是相同的,我想将它们组合在一起,然后取这些列的平均值。
基本上,
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
然后我计划得到每一栏的意思(肺,心脏等)
因此,如果你建议一个代码来计算具有相同名称的列的方法而不用它们组合就可以了。
答案 0 :(得分: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 :(得分: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
))