【问题标题】:Splitting a string column with unequal size into multiple columns using R [duplicate]使用R将大小不等的字符串列拆分为多列[重复]
【发布时间】:2021-12-20 09:51:10
【问题描述】:

在我的数据框中有一个这样的字符串列。

str=as.character(c("M 12; M 13","M 24", NA, "C 12; C 50; C 78"))
no=seq(1:4)
data.frame(no,str)

  no              str
1  1       M 12; M 13
2  2             M 24
3  3             <NA>
4  4 C 12; C 50; C 78

它有多个值,用“;”分隔象征。我需要将其拆分为多列(基于此示例的 3 列),因为每一列仅包含字符串的一个值。使用 R 可以做到这一点吗?

【问题讨论】:

    标签: r string split


    【解决方案1】:

    这是利用separateextra = merge 参数的好时机:

    library(dplyr)
    df %>% 
      separate(str, c('A', 'B', 'C'), sep= ";", extra = 'merge')
    
      no    A     B     C
    1  1 M 12  M 13  <NA>
    2  2 M 24  <NA>  <NA>
    3  3 <NA>  <NA>  <NA>
    4  4 C 12  C 50  C 78
    

    【讨论】:

      【解决方案2】:

      您可以使用str_split。注意,我假设你想给新列一个有意义的名字,所以我添加了一个rename_with,但如果你不需要,你可以直接删掉它:

      library(tidyverse)
      
      df <- data.frame(str = c("M 12; M 13","M 24", NA, "C 12; C 50; C 78"),
                       no = seq(1:4))
      
      df %>%
        mutate(splits = str_split(str, "; ")) %>%
        unnest_wider(splits) %>%
        rename_with(.cols = starts_with("..."),
                    .fn   = ~paste0("split_", 1:length(which(str_detect(., "...")))))
      

      给出:

      # A tibble: 4 x 5
        str                 no split_1 split_2 split_3
        <chr>            <int> <chr>   <chr>   <chr>  
      1 M 12; M 13           1 M 12    M 13    <NA>   
      2 M 24                 2 M 24    <NA>    <NA>   
      3 <NA>                 3 <NA>    <NA>    <NA>   
      4 C 12; C 50; C 78     4 C 12    C 50    C 78  
      

      【讨论】:

        猜你喜欢
        • 2021-12-28
        • 2021-10-29
        • 1970-01-01
        • 2021-03-07
        • 2015-08-01
        • 1970-01-01
        • 2016-03-24
        • 2023-04-05
        • 1970-01-01
        相关资源
        最近更新 更多