将逗号分隔的字符串拆分为 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"
我有一串逗号分隔的值,我想根据逗号的数量将其分成几部分。
例如:将以下字符串每 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"