Преобразуйте значения полей в имена столбцов и заполните их комбинацией значений, соответствующих определенным критериям. - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть датафрейм ниже:

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 голосов
/ 11 сентября 2018

Я придумал ответ ниже. Тем не менее, я заметил, что у вас есть записи с одинаковыми product и shop, но разными tempr и value числами. Они будут перезаписывать друг друга в указанном вами формате, а значит и в моем примере. Как вы хотите иметь дело с этими записями?

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=......) вместо пустого поля

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...