我有一个数据框,记录了由"ID"标识的不同客户的购买情况.此外,它记录了他/她每次购买的位置,例如商店#1或商店#2:
> head(data)
ID store
1 1
2 3
1 1
1 2
2 3
3 1
3 2
Run Code Online (Sandbox Code Playgroud)
我一直试图做的是,为每个顾客挑选他大部分购买他/她的商店.我正在寻找的输出将是一个类似于以下内容的数据框:
ID store
1 1
2 3
3 1
Run Code Online (Sandbox Code Playgroud)
ID#3的客户在不同的商店进行了2次购买,与聚合功能选择哪一个无关.然而,ID号1进行了3次购买,2次在商店#1,1次在商店#2,因此我必须选择商店#1.
我很难找到任何方法来做到这一点,但我的方法是基于使用聚合函数
newdata <- aggregate(data$store,list(data$ID),FUN)
使用聚合函数是最好的方法吗?我在这里看到的问题是哪个函数用作FUN.我已经尝试使用我在教程中找到的模式函数,但没有任何成功,它被定义为:
Mode <- function(x) {
ux <- unique(x)
ux[which.max(tabulate(match(x, ux)))]
}
有什么想法/想法吗?
谢谢,
贝尔纳
您可以尝试这个,基本上是建立在您开始的想法的基础上,使用aggregate.
aggregate(store ~ ID, data = df, function(x){
x[which.max(table(x))]
})
# ID store
# 1 1 1
# 2 2 3
# 3 3 1
Run Code Online (Sandbox Code Playgroud)