R 使用tapply匹配多个变量中的至少一个

R 使用tapply匹配多个变量中的至少一个,r,dataframe,summary,tapply,R,Dataframe,Summary,Tapply,我有一组数据,其中包含有关客户及其花费的信息,每个客户只出现一次。示例: 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) d

我有一组数据,其中包含有关客户及其花费的信息,每个客户只出现一次。示例:

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)
其中:

  A      B      C 
mean1  mean2  mean3
然而,我现在想找出按类别或年龄划分的平均花费金额。至少有一个共同特征的所有消费者必须在一起。在本例中,我的目标是:

Group 1    Group 2
 mean1      mean2
其中,第1组只有A类,第2组有B类,但由于B组的一名顾客的年龄(34岁)至少与C组的一件服装相同,第2组也有C类服装


在我的数据库中,我还有几个类别和年龄,我必须计算应该组成哪些组。

我们可能需要使用
==

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 

您希望函数计算哪些组应该在一起,还是预先知道?你的真实数据中还有更多的组吗?你的描述“按性别或年龄划分的平均花费金额”没有多大意义,因为没有性别列,类别列由3个类别组成,而性别大多只有两个区别(确实有些例外)。另外,OR也不清楚你的意思。你是对的,我会纠正这一点。这只适用于给定的示例。在完整的数据库中,我有更多具有不同年龄组合的类别。@LucasMartinuzzo您特别提到的
B和C是在一起的,因为它们共享34岁。
这里我只根据“A”进行分组,其他所有类别将分组为group2。我想你在帖子里没有包括一些信息
with(data, tapply(moneyspent, paste0('Group', (category != "A") +1), FUN = mean))
#  Group1   Group2 
#166.6667 320.0000