R 将列中的字符串拆分为固定长度的子字符串
以下是我的模拟代码和数据:R 将列中的字符串拆分为固定长度的子字符串,r,regex,data.table,R,Regex,Data.table,以下是我的模拟代码和数据: library(data.table) library(stringr) data <- data.table(string = c("aaaaaaaaa", "bbbbbb", "ccccccccccccccc", "aaa")) data[, length := nchar(string)] data string length 1: aaaaaaaaa 9 2: bbbbbb 6
library(data.table)
library(stringr)
data <- data.table(string = c("aaaaaaaaa", "bbbbbb", "ccccccccccccccc", "aaa"))
data[, length := nchar(string)]
data
string length
1: aaaaaaaaa 9
2: bbbbbb 6
3: ccccccccccccccc 15
4: aaa 3
这让我得到了我想要的结果——无论多么缓慢
> data
string length split
1: aaaaaaaaa 9 aaa - aaa - aaa
2: bbbbbb 6 bbb - bbb
3: ccccccccccccccc 15 ccc - ccc - ccc - ccc - ccc
4: aaa 3 aaa
我正在寻找一个不使用for
循环的解决方案,所以我猜它一定是基于regex
的
请注意,string
列的长度可能不同,但始终是3的倍数,并且必须始终分成3组
非常感谢 你可以试试这个
(?您可以尝试此操作。(?我们可以使用strsplit
将每3个字符上的字符串拆分,并将其粘贴到一个字符串中
library(data.table)
data[, split := lapply(strsplit(string, "(?<=.{3})", perl=TRUE),
paste, collapse = " - ")]
data
# string split
#1: aaaaaaaaa aaa - aaa - aaa
#2: bbbbbb bbb - bbb
#3: ccccccccccccccc ccc - ccc - ccc - ccc - ccc
#4: aaa aaa
库(data.table)
data[,split:=lappy(strsplit)(string,”(?我们可以使用strsplit
将每3个字符上的字符串拆分,并将其粘贴到一个字符串中
library(data.table)
data[, split := lapply(strsplit(string, "(?<=.{3})", perl=TRUE),
paste, collapse = " - ")]
data
# string split
#1: aaaaaaaaa aaa - aaa - aaa
#2: bbbbbb bbb - bbb
#3: ccccccccccccccc ccc - ccc - ccc - ccc - ccc
#4: aaa aaa
库(data.table)
data[,split:=lapply(strsplit(string),(?我们可以用gsub
data[, split := trimws(gsub("(...)", "\\1 - ", string), whitespace = '[- ]')][]
# string length split
#1: aaaaaaaaa 9 aaa - aaa - aaa
#2: bbbbbb 6 bbb - bbb
#3: ccccccccccccccc 15 ccc - ccc - ccc - ccc - ccc
#4: aaa 3 aaa
我们可以使用gsub
data[, split := trimws(gsub("(...)", "\\1 - ", string), whitespace = '[- ]')][]
# string length split
#1: aaaaaaaaa 9 aaa - aaa - aaa
#2: bbbbbb 6 bbb - bbb
#3: ccccccccccccccc 15 ccc - ccc - ccc - ccc - ccc
#4: aaa 3 aaa
您能确认设置了perl
标志时\G..
也能正常工作吗?@revostrsplit(数据$string,“\\G..”,perl=TRUE)
给出空字符串可能是因为它与字符匹配,而不是与位置匹配?您能否确认\G..
在设置perl
标志时也能工作?@revostrsplit(数据$string,“\\G..”,perl=TRUE)
给出空字符串可能是因为它匹配字符而不是匹配位置?