我正在使用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中的每一行。
这甚至可能吗?请询问您是否需要澄清。任何帮助都将非常感激。
谢谢!
答案 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)