#r #dplyr #tidyr #reshape2 #spread
#r #dplyr #tidyr #изменение формы 2 #разброс
Вопрос:
Я пытаюсь понять, как это сформулировать, поэтому я не нахожу хороших результатов с помощью поиска. Пример ввода:
cust_id make part price color
1 jeep wheel 10 gray
1 jeep door 5 blue
1 jeep seat 20 brown
2 ford wheel 12 gray
2 ford door 8 red
2 ford seat 25 brown
Желаемый результат:
cust_ID make wheel_price wheel_color door_price door_color seat_price seat_color
1 jeep 10 gray 5 blue 20 brown
2 ford 12 gray 8 red 25 brown
Первоначально использовался spread(), но возникли проблемы со строковыми значениями. Переключился на pivot_wider(), но по-прежнему не может получить несколько выходных столбцов / значений для каждой уникальной части. Заранее спасибо!
Ответ №1:
вы должны использовать pivot_wider:
library(dplyr)
library(tidyr)
df %>%
tidyr::pivot_wider(names_from = part, names_glue = "{part}_{.value}", values_from = c(price, color)) %>%
dplyr::select(1, 2, sort(current_vars()))
cust_id make door_color door_price seat_color seat_price wheel_color wheel_price
<int> <chr> <chr> <int> <chr> <int> <chr> <int>
1 1 jeep blue 5 brown 20 gray 10
2 2 ford red 8 brown 25 gray 12
Комментарии:
1. Спасибо! Я имел в виду pivot_wider, упс. Быстрый — я получаю «аргумент не используется» для names_glue. Есть предложения?
2. @SeanKelso Я полагаю, у вас установлена последняя версия tidyr. Я использовал предоставленные вами данные — если вы используете это для других данных, {part} должно быть тем же именем, что и в «names_from = part» (поэтому, если подразделение берет имена из другого столбца, это также должно быть указано в «names_glue = »