平均特定字段上的所有值

时间:2015-07-31 15:16:23

标签: r

我有一个像这样的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函数已经这样做但我找不到它。

3 个答案:

答案 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")