customer_code cateogry
8.92e+12 CONDIMENTI PRIMI (PELATI & SUGHI)
8.92e+12 accessoro
8.92e+12 sugaro
8.92e+13 CONDIMENTI PRIMI (PELATI & SUGHI)
8.92e+13 sugaro
需要输出
customer_code CONDIMENTI PRIMI (PELATI & SUGHI) sugaro accessoro
8.92e+12 5 10 5
8.92e+13 45 2 NA
以这种方式需要结果。
答案 0 :(得分:1)
使用它,可以看作是融化函数的反面:
library(reshape2 )
dcast(yourdata, customer_code ~ cateogry)
这将导致:
customer_code accessoro CONDIMENTI PRIMI (PELATI & SUGHI) sugaro
1 8.92e+12 accessoro CONDIMENTI PRIMI (PELATI & SUGHI) sugaro
2 8.92e+13 NA CONDIMENTI PRIMI (PELATI & SUGHI) sugaro
在此之后,如果需要,可以更改列名称。
感谢@chiwangc提供更好的输出格式。
答案 1 :(得分:1)
您可以使用基本R函数reshape()
来执行此操作。有趣的是,你的timevar是一个变化的列,我以前没见过,但你可以通过复制列来使它工作:
df <- data.frame(customer_code=c(8.92e+12,8.92e+12,8.92e+12,8.92e+13,8.92e+13), category=c('CONDIMENTI PRIMI (PELATI & SUGHI)','accessoro','sugaro','CONDIMENTI PRIMI (PELATI & SUGHI)','sugaro') );
reshape(transform(df,time=category),dir='w',idvar='customer_code');
## customer_code category.CONDIMENTI PRIMI (PELATI & SUGHI) category.accessoro category.sugaro
## 1 8.92e+12 CONDIMENTI PRIMI (PELATI & SUGHI) accessoro sugaro
## 4 8.92e+13 CONDIMENTI PRIMI (PELATI & SUGHI) <NA> sugaro
此外,您可以通过将因子强制转换为整数来实现顺序积分后缀:
reshape(transform(df,time=as.integer(category)),dir='w',idvar='customer_code');
## customer_code category.2 category.1 category.3
## 1 8.92e+12 CONDIMENTI PRIMI (PELATI & SUGHI) accessoro sugaro
## 4 8.92e+13 CONDIMENTI PRIMI (PELATI & SUGHI) <NA> sugaro
答案 2 :(得分:0)
您可以使用spread
中的tidyr
并更改列名称。
library(tidyr)
spread(df1, cateogry, cateogry)
# customer_code accessoro CONDIMENTI PRIMI (PELATI & SUGHI) sugaro
#1 8.92e+12 accessoro CONDIMENTI PRIMI (PELATI & SUGHI) sugaro
#2 8.92e+13 <NA> CONDIMENTI PRIMI (PELATI & SUGHI) sugaro
答案 3 :(得分:0)
示例数据:
x <- data.frame(customer = sample(100, 1000, replace = TRUE), category = sample(LETTERS, 1000, replace = TRUE))
使用dplyr
生成长格式:
x %>% group_by(customer, category) %>% summarise(count = n())
reshape2
用于宽幅格式:
acast(x, customer~category)
答案 4 :(得分:0)
您应该提供更好的可重现示例。我想你正在为每个顾客寻找类别项目的频率。
ID=c(8.92e+12,8.92e+13)
cat=c('CONDIMENTI PRIMI (PELATI & SUGHI)','accessoro','sugaro')
df <- as.data.frame(cbind(ID[sample(1:2,50,replace = T)], cat[sample(1:3,50,replace = T)]))
table(df[[1]], df[[2]])
以下是模拟50行的输出:
accessoro CONDIMENTI PRIMI (PELATI & SUGHI) sugaro
8.92e+12 8 8 10
8.92e+13 8 4 12