如何对R语言DataFrame中重复列按行求均值并合并?
实现方法
当然可以实现,下面提供两种常用的R语言解决方案:
方法一:基础R实现
无需额外安装包,直接利用基础函数完成列分组与行均值计算:
# 按列名对数据框列进行分组 col_groups <- split(names(temp), names(temp)) # 对每个分组内的列计算行均值,合并为新数据框 result <- data.frame(lapply(col_groups, function(group) rowMeans(temp[, group]))) # 调整列顺序为指定的A、C、D、E、F、G(可选,确保列顺序符合需求) result <- result[, c("A", "C", "D", "E", "F", "G")]
方法二:tidyverse工具包实现
适合习惯tidy风格的用户,步骤更直观:
library(tidyverse) result <- temp %>% rownames_to_column("row_id") %>% # 将行名转为单独列,避免转格式时丢失 pivot_longer(-row_id, names_to = "col_name", values_to = "value") %>% # 宽格式转长格式 group_by(row_id, col_name) %>% # 按行名和列名分组 summarise(mean_value = mean(value), .groups = "drop") %>% # 计算每组均值 pivot_wider(names_from = col_name, values_from = mean_value) %>% # 长格式转回宽格式 column_to_rownames("row_id") # 恢复原行名
结果示例
运行上述代码后,得到的结果数据框如下(保留原行名,列仅包含A、C、D、E、F、G):
A C D E F G 5_8S_rRNA 0.000000 0.00000000 0.000000 0.000000 0.000000 0.000000 5S_rRNA 0.000000 0.00000000 0.000000 0.000000 2.275007 0.000000 7SK 0.000000 0.00000000 0.000000 0.000000 0.000000 0.000000 A1BG 3.530516 3.44095220 3.090035 4.305202 3.680324 5.645010 A1BG-AS1 1.536335 2.35049725 2.015795 2.115993 1.778209 3.099295 A1CF 0.009523 0.02856915 0.094517 0.000000 0.000000 0.000000
内容的提问来源于stack exchange,提问作者Ahdee
相关产品推荐
相关产品推荐

