根据数据框的重复列值制作具有平均值(平均值)的表[重复]

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)

【讨论】:

以上是关于根据数据框的重复列值制作具有平均值(平均值)的表[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何从此表中选择并添加平均值然后排序[重复]

计算 Pandas 中具有相同列值的行的平均值

如何根据Pandas中的其他列值计算每个年龄的平均值

计算缺失数据的数据框的平均值

基于日期时间列名称的数据框的条件平均值

从具有不同条件的表中选择总和和平均值