r - 在 R 中使用 Group by 或 Aggregate 进行数据框分组
问题描述
我希望通过我拥有的当前数据框创建下表。我目前的数据框如下
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 |
---|---|
一个 | 3 |
一个 | 3 |
一个 | 4 |
乙 | 5 |
乙 | 5 |
乙 | 3 |
乙 | 3 |
乙 | 4 |
C | 3 |
C | 3 |
C | 5 |
C | 5 |
我想获得如下表格,其中显示每个唯一 ID 的 NRT 平均值
ID | NRT(平均) |
---|---|
一个 | 3.33(A 的 NRT 平均值) |
乙 | 4(B 的 NRT 平均值) |
C | 4(C 的 NRT 平均值) |
提前感谢大家的帮助:)
解决方案
如果您考虑使用 adata.table
而不是 a data.frame
(请注意 adata.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)
推荐阅读
- c# - 为什么文本框打印“3-”而不是“-3”?
- javascript - 使用 toLocaleDateString 在相同代码上的不同结果
- apache-spark - Spark xgboost4j 8300 标签得到 XGBoostModel 训练失败错误 bug 没有明显错误
- tomcat - 如何将流量从 localhost:8080 路由到 localhost:8080/myapp
- r - 我正在尝试对我的数据集进行层次聚类,我想在其中将债务人姓名聚类为 3 个类别
- python - 如何总结数据框中的行?
- haskell - 如何理解这种告诉我我使用了错误类型的类型类错误?
- python - django.core.exceptions.ValidationError: ["'urvi' 值必须是整数。"]
- sql - 如何检索财务费用每张发票的未付金额?
- umbraco - 带有参数错误的 Umbraco 操作:“找不到页面没有 umbraco 文档与 url '/About/Topic?topic=aloha' 匹配。”