我有一组数据,其中包含有关客户及其花费的信息,每位客户只出现一次。例如:
customer<-c("Andy","Bobby","Oscar","Oliver","Jane","Cathy","Emma","Chris")
age<-c(25,34,20,36,23,35,34,22)
category<-c("A","B","B","A","C","B","C","A")
moneyspent<-c(100,100,200,200,400,400,500,200)
data<-data.frame(customer=customer,age=age,category=category,moneyspent=moneyspent)
如果我想计算按类别花费的平均金额,我可以使用tapply:
tapply(data$moneyspent,data$category,mean)
给出:
A B C
mean1 mean2 mean3
但是,我现在想要找到按类别或年龄花费的平均金额。所有至少具有这些特征之一的消费者必须在一起。在这个例子中,我的目标是:
Group 1 Group 2
mean1 mean2
如果group1只有A类,而group2有B类,但由于B的其中一个客户至少有一个C组的服装(34),因此group2也有C类。
在我的数据库中,我还有几个类别和年龄,我必须计算应该形成哪些组。
答案 0 :(得分:1)
我们可能需要使用==
library(dplyr)
data %>%
group_by(grp = paste0("Group", (category != "A")+1)) %>%
summarise(moneyspent = mean(moneyspent))
如果我们想要tapply
with(data, tapply(moneyspent, paste0('Group', (category != "A") +1), FUN = mean))
# Group1 Group2
#166.6667 320.0000