R 对特定字段上的所有值求平均值

R 对特定字段上的所有值求平均值,r,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函数已经完成了,但我找不到它 这很容易做到。假设您的data.table被称为dt

我有一个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函数已经完成了,但我找不到它

这很容易做到。假设您的
data.table
被称为
dt
,您可以编写:

dt[,lapply(.SD,mean),by='ID']
dt[,lapply(.SD,mean),by='ID',.SDcols='SCORE']
如果您有许多列,并且只需要分数列的平均值,您可以编写:

dt[,lapply(.SD,mean),by='ID']
dt[,lapply(.SD,mean),by='ID',.SDcols='SCORE']
如果要排除
NA
,则

dt[,lapply(.SD,mean,na.rm=TRUE),by='ID',.SDcols='SCORE']

希望这有帮助。

这很容易做到。假设您的
data.table
被称为
dt
,您可以编写:

dt[,lapply(.SD,mean),by='ID']
dt[,lapply(.SD,mean),by='ID',.SDcols='SCORE']
如果您有许多列,并且只需要分数列的平均值,您可以编写:

dt[,lapply(.SD,mean),by='ID']
dt[,lapply(.SD,mean),by='ID',.SDcols='SCORE']
如果要排除
NA
,则

dt[,lapply(.SD,mean,na.rm=TRUE),by='ID',.SDcols='SCORE']

希望这有帮助。

或使用
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

或使用
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
基本包:

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")
基本包:

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