使用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))
IDNRT
A3
A3
A4
B5
B5
B3
B3
B4
C3
C3
C5
C5

如果您考虑使用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)

最新更新