根据数据框的重复列值制作具有平均值(平均值)的表[重复]
Posted
技术标签:
【中文标题】根据数据框的重复列值制作具有平均值(平均值)的表[重复]【英文标题】:make table with average (mean) based on repeated column values of a data frame [duplicate] 【发布时间】:2020-12-26 21:59:59 【问题描述】:我有一张这样的桌子:
并且我想计算表一中每一列的平均值的平均值,以得到一个这样的表:
你能告诉我如何在 R 中做这个表吗?
【问题讨论】:
试试aggregate(. ~ chr + i.start + i.end + coverage_con, df, mean)
共享数据时的一个好习惯是复制和粘贴数据帧的打印,而不是图像。复制太难了,因为我们无法复制和粘贴它..
@DarrenTsai 对aggregate
的调用比rodolfoksveiga 的长管要简洁得多,而且它不需要额外的包。能否请您回答一下,以便我投票赞成?
感谢@DarrenTsai,我已经给了你一个赞......因为你的两个解决方案都很聪明。 summarize_all()
就是这样!
@rodolfoksveiga 你是对的! summarize()
在处理大数据时比aggregate()
效率更高。
【参考方案1】:
带有aggregate()
的base
解决方案:
aggregate(. ~ chr + i.start + i.end + coverage_con, df, mean)
dplyr
版本:
library(dplyr)
df %>%
group_by(chr, i.start, i.end, coverage_con) %>%
summarise(across(.fns = mean, .names = "average_col"))
summarise(across(.fns = mean))
等价于summarise_all(mean)
,但前者可以通过胶合规范调整列名。
如果数据包含除分组列之外的其他非数字列,则您只能通过 where()
计算这些数字列的均值,即
... %>%
summarise(across(where(is.numeric), mean, .names = "average_col"))
相当于summarise_if(is.numeric, mean)
。
【讨论】:
这个summarize()
加上 .names 非常优雅。感谢分享!【参考方案2】:
考虑到您的数据框被称为df
,您可以这样做:
library(dplyr)
df %>%
group_by(chr, i.start, i.end, coverage_con) %>%
summarize_all(mean)
【讨论】:
以上是关于根据数据框的重复列值制作具有平均值(平均值)的表[重复]的主要内容,如果未能解决你的问题,请参考以下文章