【问题标题】:Split dataframe based on one column in r, with a non-fixed width column [duplicate]基于 r 中的一列拆分数据帧,列不固定 [重复]
【发布时间】:2017-05-23 02:41:46
【问题描述】:

我遇到了一个问题,它是 SE 上一个很好的问题的延伸。即:

Split a column of a data frame to multiple columns

我的数据有一列采用字符串格式,以逗号分隔,但没有固定长度。

data = data.frame(id = c(1,2,3), treatments = c("1,2,3", "2,3", "8,9,1,2,4"))

所以我希望我的数据框最终采用适当的整洁/长形式:

id    treatments
1     1
1     2
1     3
...
3     1
3     2
3     4

separatestrsplit 之类的东西似乎本身并不是解决方案。单独失败并警告各种列具有太多值(NB id 3 具有比 id 1 更多的值)。

谢谢

【问题讨论】:

    标签: r dataframe reshape tidyr


    【解决方案1】:

    你可以使用tidyr::separate_rows:

    library(tidyr)
    separate_rows(data, treatments)
    
    #   id treatments
    #1   1          1
    #2   1          2
    #3   1          3
    #4   2          2
    #5   2          3
    #6   3          8
    #7   3          9
    #8   3          1
    #9   3          2
    #10  3          4
    

    【讨论】:

    • 太棒了!感谢@Psidom
    【解决方案2】:

    使用dplyrtidyr 包:

    data  %>% 
      separate(treatments, paste0("v", 1:5)) %>% 
      gather(var, treatments, -id) %>% 
      na.exclude %>% 
      select(id, treatments) %>%
      arrange(id)
    
    
       id treatments
    1   1          1
    2   1          2
    3   1          3
    4   2          2
    5   2          3
    6   3          8
    7   3          9
    8   3          1
    9   3          2
    10  3          4
    

    【讨论】:

      【解决方案3】:

      你也可以使用unnest:

      library(tidyverse)
      data %>% 
        mutate(treatments = stringr::str_split(treatments, ",")) %>% 
        unnest()
      
         id treatments
      1   1          1
      2   1          2
      3   1          3
      4   2          2
      5   2          3
      6   3          8
      7   3          9
      8   3          1
      9   3          2
      10  3          4
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-31
        • 2019-11-18
        • 2018-09-07
        • 1970-01-01
        相关资源
        最近更新 更多