2016-07-14 7 views
1

Долгожданный читатель и первый постер, посмотрим, как это происходит ...Как разделять значения в столбце на несколько столбцов на основе коэффициента в R?

Я работаю в R, чтобы создать резюме средних издержек на карманные расходы для разных лекарств на основе разных поставщиков медицинских услуг. В данных у меня есть еще много компаний (~ 5000), чем я делаю продукты (4). Я знаю, что начать с агрегирование из кармана стоимости по продукции и медицинских услуг, как показано ниже:

avgdf <- aggregate(price ~ company + product, data= df, mean) 
colnames(avgdf) <- c("company", "prod", "avg_price") 

Результирующий кадр данных выглядит следующим образом: (Примечание по соображениям конфиденциальности я не могу отправить фактические данные, но имеют чтобы показать общий пример)

company prod avg_price 
A  1  88 
A  2  63 
A  3  46 
B  1  55 
C  2  8 
D  1  67 
D  2  42 
D  3  40 
D  4  61 
E  1  13 
E  2  17 
F  1  85 
F  4  17 

Я хочу, чтобы преобразовать фрейм данных таким образом, чтобы prod столбец разделен на 4 колонки, по одному для каждого из соответствующих продуктов, а также значения этих 4-х столбцов заполняются в соответствии к своей паре продуктов компании. Другими словами, я хочу, чтобы таблица выглядит следующим образом:

company prod1.avg_price prod2.avg_price prod3.avg_price prod4.avg_price 
A  88    63    46    NA 
B  55    NA    NA    NA 
C  NA    2    NA    NA 
D  67    42    40    61 
E  13    17    NA    NA 
F  85    NA    NA    17 

Я не должен иметь столько, сколько NA у меня в наборе данных, поскольку есть в моем примере, но я хочу решение, которое может справиться с этим. Я предполагаю использовать функции reshape2melt и dcast, но я не уверен, как их реализовать. Заранее благодарю за помощь!

+0

С dplyr и tidyr, 'avgdf%>% мутируют (Prod = paste0 ('Прод', Prod, '.avg_price'))%>% спрэд (Prod, avg_price)' – alistaire

ответ

1

Мы можем использовать dcast из data.table, чтобы переставить его в «широкий» формат.

library(data.table) 
dcast(setDT(avgdf), company~paste0("prod", prod, ".avg_price"), value.var = "avg_price") 
# company prod1.avg_price prod2.avg_price prod3.avg_price prod4.avg_price 
#1:  A    88    63    46    NA 
#2:  B    55    NA    NA    NA 
#3:  C    NA    8    NA    NA 
#4:  D    67    42    40    61 
#5:  E    13    17    NA    NA 
#6:  F    85    NA    NA    17 

 Смежные вопросы

  • Нет связанных вопросов^_^