将字段值转换为列名,并用匹配特定条件的值组合填充它们

时间:2018-09-11 13:32:48

标签: r

我的数据框如下:

product<-c("ab","ab","ab","ac","ac","ac")
shop<-c("sad","sad","sad","sadas","fghj","xzzv")
category<-c("a","a","a","b","b","b")
tempr<-c(35,35,14,24,14,5)
value<-c(0,0,-6,8,4,0)
store<-data.frame(product,shop,category,tempr,value)



product  shop category tempr value
1      ab   sad        a    35     0
2      ab   sad        a    35     0
3      ab   sad        a    14    -6
4      ac sadas        b    24     8
5      ac  fghj        b    14     4
6      ac  xzzv        b     5     0

我想以某种方式转换此数据框,以保持唯一的product名称并将shop名称从字段值转换为列名称。我想用tempr及其相对的value的组合来填充此数据帧,但仅适用于不为0的值,否则单元格应该为空。如果商店中不存在产品,则单元格也应该为空。最终形式的示例是:

store2
  product    sad sadas  fghj xzzv
1      ab 14(-6)                 
2      ac        24(8) 14(4)   

这可能是一种方法:

library(reshape2)
store2<-dcast(store, product ~ shop,value.var=value)

1 个答案:

答案 0 :(得分:1)

我想出了以下答案。但是,我注意到您的记录具有相同的productshop,但是具有不同的temprvalue号。它们将以您指定的格式相互覆盖,因此在我的示例中也是如此。您想如何处理这些记录?

store2 <- matrix(NA,ncol=length(unique(store$shop)),nrow=length(unique(store$product)))
colnames(store2) <- unique(store$shop)
rownames(store2) <- unique(store$product)

for(i in 1:ncol(store)) {
  store2[store[i,'product'],store[i,'shop']] <- paste0(store[i,c('tempr')],'(',store[i,'value'],')')
}

NB:作为“空值”,我现在使用NA,因为它是R的表示形式,建议对缺失值进行编码。您可以使用store2 <- matrix('',ncol=......)代替空白字段