下面是一个玩具问题,演示了我的问题。
我有一个数据框架,其中包含一组员工;对于每个员工,它都有一个姓名、工资、性别和州。
aggregate(salary ~ state) # Returns the average salary per state
aggregate(salary ~ state + gender, data, FUN = mean) # Avg salary per state/gender我实际上需要的是每个州女性工资总额的汇总。
aggregate(salary ~ state + gender, data, FUN = sum) 返回每个州女性(和男性)的工资总额,但我真正需要的是每个州级别的salary_w / salary_total。我可以写一个for循环,等等--但我想知道是否有一些方法可以使用aggregate来实现。
发布于 2010-12-03 10:39:24
另一种选择是使用plyr。ddply()期望data.frame作为输入,并将返回data.frame作为输出。第二个参数是您希望如何拆分数据帧。第三个参数是我们想要应用于块的内容,这里我们使用summarise从现有的data.frame创建一个新的data.frame。
library(plyr)
#Using the sample data from kohske's answer above
> ddply(d, .(state), summarise, ratio = sum(salary[gender == "Woman"]) / sum(salary))
state ratio
1 1 0.5789860
2 2 0.4530224发布于 2010-12-03 10:16:38
也许reshape或reshape2会对你的工作有所帮助。
下面是一个示例脚本:
library(reshape2) # from CRAN
# sample data
d <- data.frame(expand.grid(state=gl(2,2),gender=gl(2,1, labels=c("Men","Wemon"))),
salaly=runif(8))
d2 <- dcast(d, state~gender, sum)
d2$frac <- d2$Wemon/(d2$Men+d2$Wemon)发布于 2010-12-03 12:25:31
对于这样的问题,ave函数很好用。
Data$ratio <- ave(Data$salary, Data$state, Data$gender, FUN=sum) /
ave(Data$salary, Data$state, FUN=sum)https://stackoverflow.com/questions/4341157
复制相似问题