【问题标题】:R data long to wide with multiple output columns/values具有多个输出列/值的 R 数据从长到宽
【发布时间】:2020-11-12 10:34:47
【问题描述】:

苦于如何措辞,所以我没有通过搜索找到很好的结果。示例输入:

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() 但仍然无法为每个唯一部分获取多个输出列/值。提前致谢!

【问题讨论】:

    标签: r dplyr tidyr reshape2 spread


    【解决方案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 
    

    【讨论】:

    • 谢谢!我的意思是pivot_wider,哎呀。快速 - 我得到了 names_glue 的“未使用参数”。有什么建议吗?
    • @SeanKelso 我想你已经安装了最新的 tidyr 版本。我使用了您提供的数据 - 如果您将其用于其他数据,{part} 必须与“names_from = part”中的名称相同(因此,如果您从另一列中获取名称,则必须进入“names_glue = " 也是
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    • 2019-11-22
    • 1970-01-01
    • 1970-01-01
    • 2020-02-18
    • 1970-01-01
    相关资源
    最近更新 更多