具有多个输出列/值的R数据从长到宽

问题描述

努力拼写这个字眼,因此无法通过搜索找到不错的结果。输入示例:

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

最初使用了split(),但遇到了字符串值问题。切换到ivot_wider(),但仍无法为每个唯一零件获取多个输出列/值。预先感谢!

解决方法

您必须使用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