如何在两列中合并ddply?

时间:2014-02-05 03:54:36

标签: r plyr

我在一些城市的网站上有一些数据看起来像这样:

CITY        STATE   LAT     LON     SCORE
Jacksonville    FL  30.328539   -81.65101   5
Jacksonville    FL  30.392888   -81.67933   6
Jacksonville    FL  30.268572   -81.73987   4
Jacksonville    FL  30.348585   -81.49965   3
Lake Worth      FL  26.579714   -80.07437   6
Lake Worth      FL  26.609226   -80.12874   3
Miami       FL  25.813808   -80.2058    3
Miami       FL  25.753927   -80.27034   2
Miami       FL  25.786326   -80.2029    6
Miami       FL  25.817325   -80.19046   8
Miami       FL  25.812625   -80.2369    9
Miami       FL  25.885739   -80.23264   4
Miami       FL  25.962069   -80.14465   5

我想计算每个城市的记录并平均得分。我知道如果城市是独一无二的,我可以用ddply做到这一点,但事实并非如此。那里有一个“迈阿密,KS”或其他东西。所以我需要对合并后的城市和州进行ddply。类似的东西:

ddply(sometable, .(CITY, STATE), summarise,
                            mean.score=mean(SCORE),
                            record.count=length(SCORE)
                            )

有办法吗?我还需要为每个城市抓住一个纬度/经度对。无论哪一个。

1 个答案:

答案 0 :(得分:1)

library(plyr)
ddply(data,c(.(CITY),.(STATE)),summarise,count=length(SCORE),mean=mean(SCORE))  

或者您可以使用:

library(data.table)
data <- data.table(data)
data[, list(count=length(SCORE), mean=mean(SCORE)), by=c("CITY", "STATE")]  

或者这个:

aggregate(SCORE~CITY+STATE,data,function(x) cbind(length(x),mean(x)))

       CITY STATE count     mean
1 Jacksonville    FL     4 4.500000
2   Lake Worth    FL     2 4.500000
3        Miami    FL     7 5.285714