我有一个像这样的data.table:
ID SCORE
1 100
1 150
1 200
2 30
3 600
3 300
我想创建一个表来平均具有特定ID的所有人的分数,并将其放入新的数据表(或同一个,无关紧要)。因此,新的data.table应如下所示:
ID SCORE
1 150
2 30
3 450
我真的不知道从哪里开始。我认为应该有一个R函数已经这样做但我找不到它。
答案 0 :(得分:2)
这很容易做到。假设您的data.table
被称为dt
,您可以写:
dt[,lapply(.SD,mean),by='ID']
如果你有很多列,而你只想要SCORE列的平均值,你可以写:
dt[,lapply(.SD,mean),by='ID',.SDcols='SCORE']
如果您想排除NA
,那么
dt[,lapply(.SD,mean,na.rm=TRUE),by='ID',.SDcols='SCORE']
希望这有帮助。
答案 1 :(得分:1)
或dplyr
df %>% group_by(ID) %>% summarise(Score = mean(SCORE))
Source: local data frame [3 x 2]
ID Score
1 1 150
2 2 30
3 3 450
答案 2 :(得分:1)
基础套餐:
aggregate(. ~ ID, df, mean)
ID SCORE
1 1 150
2 2 30
3 3 450
使用sqldf
sqldf("SELECT ID, AVG(SCORE) AS SCORE
FROM df
GROUP BY ID")