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

Posted

技术标签:

【中文标题】将逗号分隔的字符串拆分为 R 中定义的数量【英文标题】:Split a comma separated string into defined number of pieces in 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

【问题讨论】:

【参考方案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"   

【讨论】:

以上是关于将逗号分隔的字符串拆分为 R 中定义的数量的主要内容,如果未能解决你的问题,请参考以下文章

将逗号分隔的字符串拆分为数组?

Redshift :- 易于将逗号分隔的字符串拆分为行

如何将逗号分隔的字符串拆分为字符串列表?

将逗号分隔的字符串拆分为mysql中的行

如何在存储过程中拆分逗号分隔的字符串?

sql 将逗号分隔的字符串拆分为值列表(返回游标)