R-使用重复的平均值创建新的df

时间:2016-12-09 05:18:48

标签: r

我正在使用R工作室,但我是一个几乎完全新手,所以请原谅我可能的基本问题

我有一个带有原始名称(A,B,C)的大型df和包含重复样本名称的列名。它看起来像这样:

   MNSA.1 MNSA.2 NSDW.1 NSDW.2 NAR.1 NAR.2
A    7      8     9     5      3      2
B    7      4     3     8      8      5
C    3      3     4     7      8      3

我没有任何NAs或缺少值(尽管我确实有0),但是从这个df,我需要创建另一个包含重复项之间平均值的数据帧(“。1”和“.2”)。它看起来像这样:

   MNSA  NSDW  NAR
A   7.5   7    2.5
B   5.5   5.5  6.5
C    3    5.5  5.5

因此得到的df(例如“7”)中的每个值都是其对应的.1和.2列之间的平均值(NSDW.1,行A:“9”和NSDW.2行A:“5” )对于原始df中的每一行。

这甚至可能吗?请询问您是否需要澄清。任何帮助都将非常感激。

谢谢!

1 个答案:

答案 0 :(得分:0)

我们可以split通过列名(删除后缀部分后)list并获取rowMeans

sapply(split.default(df1, sub("\\.\\d+", "", names(df1))), rowMeans)
#   MNSA NAR NSDW
#A  7.5 2.5  7.0
#B  5.5 6.5  5.5
#C  3.0 5.5  5.5

或者我们可以使用dplyr/tidyr方法

library(dplyr)
library(tidyr)
tibble::rownames_to_column(df1, var = "rn") %>% 
     gather(Var, Val, -rn) %>%
     separate(Var, into = c("Var1", "Var2")) %>% 
     group_by(rn, Var1) %>% 
     summarise(Val = mean(Val)) %>%
     spread(Var1, Val)