首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在多变量中使用tapply

在多变量中使用tapply
EN

Stack Overflow用户
提问于 2014-12-10 17:56:42
回答 2查看 4.7K关注 0票数 1

我有一组数据,其中包含了关于客户的信息以及他们花费了多少钱,每个客户只出现一次:

代码语言:javascript
复制
customer<-c("Andy","Bobby","Oscar","Oliver","Jane","Cathy","Emma","Chris")
age<-c(25,34,20,35,23,35,34,22)
gender<-c("male","male","male","male","female","female","female","female")
moneyspent<-c(100,100,200,200,400,400,500,200)

data<-data.frame(customer=customer,age=age,gender=gender,moneyspent=moneyspent)

如果我想计算男性和女性客户的平均消费金额,我可以使用tapply:

代码语言:javascript
复制
tapply(moneyspent,gender,mean)

这意味着:

代码语言:javascript
复制
female   male 
  375    150

不过,我现在想找出按性别及年龄组别计算的平均开支额,而我的目标是:

代码语言:javascript
复制
 Male Age 20-30      Female Age 20-30      Male Age 30-40      Female Age 30-40
    150                     300                 150                   450

我如何修改代码,使其给出这些结果?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-10 18:03:33

您可能需要使用cut

代码语言:javascript
复制
mat <- tapply(moneyspent, list(gender, age=cut(age, breaks=c(20,30,40), 
                include.lowest=TRUE)), mean)

nm1 <- outer(rownames(mat), colnames(mat), FUN=paste)
setNames(c(mat), nm1)
#female [20,30]   male [20,30] female (30,40]   male (30,40] 
#       300            150            450            150 

其他选择包括

代码语言:javascript
复制
library(dplyr)
data %>% 
     group_by(gender, age=cut(age, breaks=c(20,30,40), 
              include.lowest=TRUE)) %>% 
     summarise(moneyspent=mean(moneyspent))

代码语言:javascript
复制
 library(data.table)
 setDT(data)[, list(moneyspent=mean(moneyspent)),
     by=list(gender, age=cut(age, breaks= c(20,30,40), include.lowest=TRUE))]
票数 2
EN

Stack Overflow用户

发布于 2019-02-18 19:18:54

使用plyr包

代码语言:javascript
复制
library(plyr)

ddply(data,.(gender, age=cut(age, breaks=c(20,30,40), 
                  include.lowest=TRUE)), summarize, moneyspent=mean(moneyspent))

也会给出同样的结果。

注释: Summarize和Summarie执行相同的功能。

警告: loading plyr掩盖了dplyr的总结!在再次使用像detach plyr这样的函数之前,您需要使用Summarize

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27407726

复制
相关文章

相似问题

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