Dan*_*n Q 9 aggregate r dataframe
我有一个数据框,我从这样的文件中读取:
name, points, wins, losses, margin
joe, 1, 1, 0, 1
bill, 2, 3, 0, 4
joe, 5, 2, 5, -2
cindy, 10, 2, 3, -2.5
Run Code Online (Sandbox Code Playgroud)
等等
我想在这些数据的所有行中平均列值,是否有一种简单的方法在R中执行此操作?
例如,我想获得所有"Joe's"的平均列值,如下所示
joe, 3, 1.5, 2.5, -.5
Run Code Online (Sandbox Code Playgroud)
dar*_*zig 13
加载数据后:
df <- structure(list(name = structure(c(3L, 1L, 3L, 2L), .Label = c("bill", "cindy", "joe"), class = "factor"), points = c(1L, 2L, 5L, 10L), wins = c(1L, 3L, 2L, 2L), losses = c(0L, 0L, 5L, 3L), margin = c(1, 4, -2, -2.5)), .Names = c("name", "points", "wins", "losses", "margin"), class = "data.frame", row.names = c(NA, -4L))
Run Code Online (Sandbox Code Playgroud)
只需使用该aggregate功能:
> aggregate(. ~ name, data = df, mean)
name points wins losses margin
1 bill 2 3.0 0.0 4.0
2 cindy 10 2.0 3.0 -2.5
3 joe 3 1.5 2.5 -0.5
Run Code Online (Sandbox Code Playgroud)
义务plyr和reshape解决方案:
library(plyr)
ddply(df, "name", function(x) mean(x[-1]))
library(reshape)
cast(melt(df), name ~ ..., mean)
Run Code Online (Sandbox Code Playgroud)