【问题标题】: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() 效率更高。

标签: r average mean


【解决方案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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-03
    • 2017-03-15
    • 1970-01-01
    • 1970-01-01
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多