我有以下格式的数据框
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 %>% group_by(Id) %>% summarise(total = sum(amount)) %>% as.data.frame
Id total
101 142
102 115
103 238
如何使用分类列(服务/类型/频道)和group_by(Id)
以类似方式汇总数据?我知道我们可以在这里使用table()
,但我正在尝试创建一个数据框,我可以将其用于进一步分析,例如聚类。
答案 0 :(得分:2)
以Id
可以概括的方式重构分类变量的一种方法是创建虚拟编码变量,其中1表示存在,0表示不存在。然后,通过Id得到每个类别的计数(即ATM1使用的次数)。
我们使用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次。