【问题标题】:Data frame grouping using Group by or Aggregate in R在 R 中使用 Group by 或 Aggregate 进行数据框分组
【发布时间】:2021-03-24 11:30:34
【问题描述】:

我希望通过我拥有的当前数据框创建下表。我目前的数据框如下

ID = c(rep("A",3), rep("B",5), rep("C",4))
NRT = c(3,3,4,5,5,3,3,4,3,3,5,5)
df = as.data.frame(cbind(ID,NRT))
ID NRT
A 3
A 3
A 4
B 5
B 5
B 3
B 3
B 4
C 3
C 3
C 5
C 5

我想获得如下表格,显示每个唯一 ID 的 NRT 平均值

ID NRT(Average)
A 3.33 (average of NRT for A)
B 4 (average of NRT for B)
C 4 (average of NRT for C)

提前感谢大家的帮助:)

【问题讨论】:

  • 试试:df %>% group_by(ID) %>% summarise(NRT = mean(NRT))aggregate(NRT ~ ID, df, mean)
  • 为什么要评论而不是将其放在答案中?

标签: r function group-by aggregate data-manipulation


【解决方案1】:

如果您考虑使用data.table 而不是data.frame(请注意data.table 继承自data.frame),这是最容易实现的

library(data.table)

ID = c(rep("A",3), rep("B",5), rep("C",4))
NRT = c(3,3,4,5,5,3,3,4,3,3,5,5)
df = as.data.frame(cbind(ID,NRT))

dt <- as.data.table(df)
dt[, list("NRT (Average)" = mean(NRT)), by = ID]
   ID NRT (Average)
1:  A    3.333333
2:  B    4.000000
3:  C    4.000000

如果您希望在发布时完全打印表格,您可以执行以下操作

library(data.table)
dt <- data.table(ID = c(rep("A",3), rep("B",5), rep("C",4)), NRT = c(3,3,4,5,5,3,3,4,3,3,5,5))
dt[, "NRT(Average)" := paste0(mean(NRT), " (average for NRT for ", ID, ")"), by = ID]
dt[, .SD[1], by = ID][, c(1, 3)] 
   ID                             NRT(Average)
1:  A 3.33333333333333 (average for NRT for A)
2:  B                4 (average for NRT for B)
3:  C                4 (average for NRT for C)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    • 2020-08-19
    • 2021-03-26
    • 2021-04-06
    • 2015-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多