将逗号分隔的字符串拆分为 R 中定义数量的片段

Split a comma separated string into defined number of pieces in R

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

例如:将以下字符串每 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

我们可以用逗号 (',') 拆分 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))

一个基本的 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"     

使用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"