首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >汇总或汇总以获得比率

汇总或汇总以获得比率
EN

Stack Overflow用户
提问于 2010-12-03 07:39:06
回答 6查看 4.6K关注 0票数 5

下面是一个玩具问题,演示了我的问题。

我有一个数据框架,其中包含一组员工;对于每个员工,它都有一个姓名、工资、性别和州。

代码语言:javascript
复制
aggregate(salary ~ state)  # Returns the average salary per state
aggregate(salary ~ state + gender, data, FUN = mean)  # Avg salary per state/gender

我实际上需要的是每个州女性工资总额的汇总。

代码语言:javascript
复制
aggregate(salary ~ state + gender, data, FUN = sum)  

返回每个州女性(和男性)的工资总额,但我真正需要的是每个州级别的salary_w / salary_total。我可以写一个for循环,等等--但我想知道是否有一些方法可以使用aggregate来实现。

EN

回答 6

Stack Overflow用户

发布于 2010-12-03 10:39:24

另一种选择是使用plyr。ddply()期望data.frame作为输入,并将返回data.frame作为输出。第二个参数是您希望如何拆分数据帧。第三个参数是我们想要应用于块的内容,这里我们使用summarise从现有的data.frame创建一个新的data.frame。

代码语言:javascript
复制
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
票数 8
EN

Stack Overflow用户

发布于 2010-12-03 10:16:38

也许reshape或reshape2会对你的工作有所帮助。

下面是一个示例脚本:

代码语言:javascript
复制
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)
票数 3
EN

Stack Overflow用户

发布于 2010-12-03 12:25:31

对于这样的问题,ave函数很好用。

代码语言:javascript
复制
Data$ratio <- ave(Data$salary, Data$state, Data$gender, FUN=sum) /
              ave(Data$salary, Data$state, FUN=sum)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4341157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档