首页 > 解决方案 > 具有多个输出列/值的 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

最初使用的是 spread() 但遇到了字符串值的问题。切换到 pivot_wider() 但仍然无法为每个唯一部分获取多个输出列/值。提前致谢!

标签: rdplyrtidyrreshape2spread

解决方案


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

推荐阅读