R 对特定字段上的所有值求平均值
我有一个data.table,如下所示: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
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")