【问题标题】:summarize categorical data based on grouping基于分组汇总分类数据
【发布时间】:2017-12-30 13:46:24
【问题描述】:

我有一个如下形式的数据框

Id <- c(101,102,103,101,103,103,102,101,103,102)
Service <- c('A','B','A','C','A','A','B','C','A','B')
Type <- c('C','I','C','I','C','C','C','I','I','C')
Channel <- c('ATM1','ATM2','ATM1','Teller','Teller','ATM2','ATM1','ATM1','ATM2','Teller')
amount <- c(11,34,56,37,65,83,26,94,34,55)

df <- data.frame(Id,Service,Channel,Type,amount)

表格格式的df

Id Service Channel Type amount
101       A    ATM1    C     11
102       B    ATM2    I     34
103       A    ATM1    C     56
101       C  Teller    I     37
103       A  Teller    C     65
103       A    ATM2    C     83
102       B    ATM1    C     26
101       C    ATM1    I     94
103       A    ATM2    I     34
102       B  Teller    C     55

我可以使用amount 列作为df %&gt;% group_by(Id) %&gt;% summarise(total = sum(amount)) %&gt;% as.data.frame 来总结我的数据

 Id total
101   142
102   115
103   238

如何使用分类列(服务/类型/通道)和group_by(Id) 以类似的方式汇总数据?我知道我们可以在这里使用table(),但我正在尝试创建一个数据框,我可以将其用于进一步分析,例如聚类。

【问题讨论】:

  • 您要查找的是group_by(id, Service, Type, Channel) 还是您的问题更复杂?
  • @PoGibas 是的,我已经尝试过了,对每个分类变量进行分组,然后查看每个 customer Id 花费的金额,但它没有用。我的目标是稍后运行聚类分析以根据 Id 查找客户群。我只是不知道我们可以对我的数据集上的分类特征进行什么类型的聚合。我只是不知道在这种情况下如何进行。这里也是原始问题链接datascience.stackexchange.com/questions/26124/…
  • 请发布您想要的输出,因为不清楚您在寻找什么。如果问题是什么是聚类分析的好格式,那么 SO 可能不是搜索答案的最佳位置。
  • 实际的问题没有任何意义。 OP 不清楚究竟应该输出什么。
  • 请注意,聚类分析是否是使用此数据的正确技术超出了此问题的范围,因为该问题在Data Science SO Community 上得到了更好的解决。

标签: r dplyr data-manipulation


【解决方案1】:

Id 总结的方式重组分类变量的一种方法是创建虚拟编码变量,其中 1 表示存在,0 表示不存在。然后,按 Id 汇总每个类别的计数结果(即使用 ATM 1 的次数)。

我们使用dummies 包来创建虚拟编码变量。

Id <- c(101,102,103,101,103,103,102,101,103,102)
Service <- c('A','B','A','C','A','A','B','C','A','B')
Type <- c('C','I','C','I','C','C','C','I','I','C')
Channel <- c('ATM1','ATM2','ATM1','Teller','Teller','ATM2','ATM1','ATM1','ATM2','Teller')
amount <- c(11,34,56,37,65,83,26,94,34,55)

df <- data.frame(Id,Service,Channel,Type,amount)
library(dummies)
df <- dummy.data.frame(df,names=c("Service","Type","Channel"))
aggregate(. ~ Id,data=df,"sum")

...和输出:

> aggregate(. ~ Id,data=df,"sum")
   Id ServiceA ServiceB ServiceC ChannelATM1 ChannelATM2 ChannelTeller TypeC
1 101        1        0        2           2           0             1     1
2 102        0        3        0           1           1             1     2
3 103        4        0        0           1           2             1     3
  TypeI amount
1     2    142
2     1    115
3     1    238
> 

我们将结果解释如下。

Id 101用过一次Service A,两次Service C,一次ATM1,一次Teller,一次Type I,两次Type C,总共142。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-27
    • 1970-01-01
    • 2023-03-14
    • 2022-08-24
    • 1970-01-01
    • 1970-01-01
    • 2020-01-30
    相关资源
    最近更新 更多