【问题标题】:Collapsing data with the same ID, into single rows [duplicate]将具有相同 ID 的数据折叠成单行 [重复]
【发布时间】:2015-11-25 12:35:43
【问题描述】:

我有一个如下所示的数据框:

  B0022HOME_NO  Device_Detail
1      1043036  Laptop/Netbook
2      1043036         Tablet
3      3753259  Laptop/Netbook   
4      3753259  Laptop/Netbook   
5      3753259         Tablet   
6      3753259         Tablet

我想要得到的 t 是这样的,其中每个唯一的 B0022HOME_NO 值都有一行,包含所有 Device_Detail 列表。

  B0022HOME_NO  Device_Detail1  Device_Detail2  Device_Detail3  Device_Detail4
1      1043036  Laptop/Netbook  Tablet
2      3753259  Laptop/Netbook  Laptop/Netbook  Tablet          Tablet         

我对 Dplyr(和 R)还很陌生,所以一直在尝试使用 gather 函数,但无济于事。

【问题讨论】:

    标签: r


    【解决方案1】:

    我们可以试试

    library(data.table)
    setDT(df2)[, N:= paste0('Device_Detail',1:.N), B0022HOME_NO]
    dcast(df2, B0022HOME_NO~ N, value.var='Device_Detail', fill='')
    # B0022HOME_NO Device_Detail1 Device_Detail2 Device_Detail3 Device_Detail4
    #1:      1043036 Laptop/Netbook         Tablet                              
    #2:      3753259 Laptop/Netbook Laptop/Netbook         Tablet         Tablet
    

    或者

    library(dplyr)
    library(tidyr)
    df2 %>% 
        group_by(B0022HOME_NO) %>%
        mutate(N = paste0('Device_Detail', row_number())) %>%
        spread(N, Device_Detail, fill='')
    # B0022HOME_NO Device_Detail1 Device_Detail2 Device_Detail3 Device_Detail4
    #         (int)          (chr)          (chr)          (chr)          (chr)
    #1      1043036 Laptop/Netbook         Tablet                              
    #2      3753259 Laptop/Netbook Laptop/Netbook         Tablet         Tablet
    

    【讨论】:

      猜你喜欢
      • 2017-11-14
      • 2020-01-06
      • 1970-01-01
      • 2016-12-10
      • 2022-01-26
      • 2020-05-19
      • 1970-01-01
      • 2016-01-02
      • 1970-01-01
      相关资源
      最近更新 更多