2015-05-26 22 views

回答

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提供更好的输出格式。

+0

如果我的类特定客户被重复了两次,它抛出错误重复 –

+0

并得到返回的值是数字,基本上算值我想回到 –

+0

你的意思是你的第二个评论?哪些值得到返回是数字? – MichaelVE

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 
0

您可以使用从tidyrspread并更改列名。

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 
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) 
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