R 考虑到因子频率,如何按客户ID聚合数据帧?

R 考虑到因子频率,如何按客户ID聚合数据帧?,r,aggregate,R,Aggregate,我有一个数据框,记录不同客户的购买情况,由他们的“ID”标识。此外,它还记录他/她每次购买的地点,例如商店1或商店2: 我一直想做的是,为每位顾客挑选他/她的大部分购买的商店。我要寻找的输出将是一个数据帧,看起来像: ID store 1 1 2 3 3 1 ID为#3的客户在不同的商店购买了2件商品,聚合函数选择哪一件无关紧要。然而,身份证号码1购买了3次,2次在1号店,1次在2号店,所以我必须选择1号店 我正在努力寻找任何方法来实现这一点,但我的方法是基于使用聚合函数 newd

我有一个数据框,记录不同客户的购买情况,由他们的“ID”标识。此外,它还记录他/她每次购买的地点,例如商店1或商店2:

我一直想做的是,为每位顾客挑选他/她的大部分购买的商店。我要寻找的输出将是一个数据帧,看起来像:

ID store
1   1
2   3
3   1
ID为#3的客户在不同的商店购买了2件商品,聚合函数选择哪一件无关紧要。然而,身份证号码1购买了3次,2次在1号店,1次在2号店,所以我必须选择1号店

我正在努力寻找任何方法来实现这一点,但我的方法是基于使用聚合函数


newdatatable
ddply
which.max
的组合将满足您的需求:

d <- read.table(text="ID store
 1    1
 2    3
 1    1
 1    2
 2    3
 3    1
 3    2", header=TRUE)

> ddply(data.frame(table(d)), .(ID), summarize, store = which.max(Freq))

ID store
1     1
2     3
3     1
ddply(data.frame(表(d)),(ID),summary,store=which.max(Freq))
ID存储
1     1
2     3
3     1

您可以尝试这个方法,基本上是基于您最初的想法,使用
聚合

aggregate(store ~ ID, data = df, function(x){
  x[which.max(table(x))]
})

#   ID store
# 1  1     1
# 2  2     3
# 3  3     1

我想将@tcash21提出的解决方案扩展到存在频率相同的商店的情况。在您的示例中,商店1和2由同一个人(ID 3)以相同的频率访问,如列联表所示:

table(data)

   store
ID  1 2 3
  1 2 1 0
  2 0 0 2
  3 1 1 0
总结如下:

ddply(data.frame(table(data)), .(ID), summarise, store = which(Freq==max(Freq)))

  ID store
1  1     1
2  2     3
3  3     1
4  3     2

+1用于在Stackoverflow的第一个问题中提供最小的虚拟数据集,清楚地描述所需的结果,并向我们展示您尝试过的代码。欢迎
ddply(data.frame(table(data)), .(ID), summarise, store = which(Freq==max(Freq)))

  ID store
1  1     1
2  2     3
3  3     1
4  3     2