【问题标题】:Split a comma separated string into defined number of pieces in R将逗号分隔的字符串拆分为 R 中定义的数量
【发布时间】:2020-04-03 02:00:33
【问题描述】:

我有一串逗号分隔值,我想根据逗号的数量将其分成几部分。

例如:将以下字符串每隔 5 个值或逗号拆分一次:

txt = "120923,120417,120416,105720,120925,120790,120792,120922,120928,120930,120918,120929,61065,120421" 

结果是:

[1] 120923,120417,120416,105720,120925
[2] 120790,120792,120922,120928,120930
[3] 120918,120929,61065,120421

【问题讨论】:

    标签: r string split comma


    【解决方案1】:

    我们可以用逗号 (',') 拆分 text,并将它们分成 5 个一组。

    temp <- strsplit(txt, ",")[[1]]
    split(temp, rep(seq_along(temp), each  = 5, length.out = length(temp)))
    
    #$`1`
    #[1] "120923" "120417" "120416" "105720" "120925"
    
    #$`2`
    #[1] "120790" "120792" "120922" "120928" "120930"
    
    #$`3`
    #[1] "120918" "120929" "61065"  "120421"
    

    如果您希望它们作为一个连接字符串,我们可以使用by

    as.character(by(temp, rep(seq_along(temp), each  = 5, 
                          length.out = length(temp)), toString))
    

    【讨论】:

      【解决方案2】:

      一个基本的 R 选项是将gregexpr 与以下正则表达式模式一起使用:

      \d+(?:,\d+){0,4}
      

      此模式将匹配一个数字,然后贪婪地匹配零到四个其他 CSV 数字。请注意,由于该模式是贪婪的,它总是会尝试匹配输入中剩余的最大可用数。

      txt <- "120923,120417,120416,105720,120925,120790,120792,120922,120928,120930,120918,120929,61065,120421"
      regmatches(txt,gregexpr("\\d+(?:,\\d+){0,4}",txt))
      
      [1] "120923,120417,120416,105720,120925" "120790,120792,120922,120928,120930"
      [3] "120918,120929,61065,120421"     
      

      【讨论】:

        【解决方案3】:

        使用str_extract

        library(stringr)
        str_extract_all(txt, "\\d+(,\\d+){1,4}")[[1]]
        #[1] "120923,120417,120416,105720,120925" "120790,120792,120922,120928,120930"
        #[3] "120918,120929,61065,120421"   
        

        【讨论】:

          猜你喜欢
          • 2021-02-24
          • 1970-01-01
          • 1970-01-01
          • 2018-12-21
          • 1970-01-01
          • 1970-01-01
          • 2015-03-07
          相关资源
          最近更新 更多