2012-10-14 40 views
0

可能重复:
faster way to create variable that aggregates a column by id获取在ID组平均值

所以事情是,我从一个CSV文件加载以下数据:

id  value2 value3 
1.000 0.010 14   
1.000 0.019 15   
0.995 0.024 13   
0.995 0.031 20   
0.990 0.012 13   
..... 

我想计算组中的value2value3的平均值/中值等值id。之后该计划能够通过value2value3对结果进行排序。

有没有办法做这样的工作?

在此先感谢。假设你有所谓的数据帧中的数据

+1

重复的问题可能不是一个完美的匹配,但这是相当基本的,并已被_many_次在这里问过。来自plyr包的'aggregate','tapply','split'以及'lapply' /'sapply'和/或'ddply'都可以完成你想要做的事情。 – Dason

回答

3
library(plyr) 
result <- ddply(df, .(id), function(x) { 
    data.frame(mv2 = mean(x$value2), mv3 = mean(x$value3)) 
    }) 

# order by mean value2 
arrange(result, mv2) 
# and for value 3 
arrange(result, mv3) 
0

df你可以做到以下几点:

sapply(split(df[-1], df$id), sapply, mean) 
6

这是data.table星期天!这对于大数据将会很好 - 快速高效。

> library(data.table) 
> DT <- as.data.table(df) 
> DT[, list(val2=mean(value2), val3=mean(value3)), by=id] 
     id val2 val3 
1: 1.000 0.0145 14.5 
2: 0.995 0.0275 16.5 
3: 0.990 0.0120 13.0