将逗号分隔的字符串拆分为 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 中定义的数量的主要内容,如果未能解决你的问题,请参考以下文章