R 在预定义位置拆分字符串
R splitting string on predefined location
我有字符串,应该从“随机”位置拆分成多个部分。拆分总是从冒号后的下一个逗号开始。
我的想法是找到带有
的冒号
stringr::str_locate_all(test, ":") %>%
unlist()
然后找到逗号
stringr::str_locate_all(test, ",") %>%
unlist()
并从那里找出应该拆分的位置,但找不到合适的方法。感觉冒号后逗号前总是有 6 个字符,但我不能确定整个数据。
这是示例字符串:
dput(test)
"AA,KK,QQ,JJ,TT,99,88:0.5083,66,55:0.8303,AK,AQ,AJs,AJo:0.9037,ATs:0.0024,ATo:0.5678"
这是应该的结果
dput(result)
c("AA,KK,QQ,JJ,TT,99,88:0.5083", "66,55:0.8303", "AK,AQ,AJs,AJo:0.9037",
"ATs:0.0024", "ATo:0.5678")
这里有一个带有 strsplit
的选项 - 将 .
和一位或多位数字 (\d+
) 后面的 ,
替换为新的分隔符使用 gsub
,然后在 base R
中与 strsplit
拆分
result1 <- strsplit(gsub("([0-9]\.[0-9]+),", "\1;", test), ";")[[1]]
-正在检查
> identical(result, result1)
[1] TRUE
如果字符数是固定的,使用正则表达式查找
result1 <- strsplit(test, "(?<=:.{6}),", perl = TRUE)[[1]]
也许我们可以像下面这样使用regmatches
> regmatches(test, gregexpr("(\w+,?)+:[0-9.]+", test))[[1]]
[1] "AA,KK,QQ,JJ,TT,99,88:0.5083" "66,55:0.8303"
[3] "AK,AQ,AJs,AJo:0.9037" "ATs:0.0024"
[5] "ATo:0.5678"
我有字符串,应该从“随机”位置拆分成多个部分。拆分总是从冒号后的下一个逗号开始。
我的想法是找到带有
的冒号stringr::str_locate_all(test, ":") %>%
unlist()
然后找到逗号
stringr::str_locate_all(test, ",") %>%
unlist()
并从那里找出应该拆分的位置,但找不到合适的方法。感觉冒号后逗号前总是有 6 个字符,但我不能确定整个数据。
这是示例字符串:
dput(test)
"AA,KK,QQ,JJ,TT,99,88:0.5083,66,55:0.8303,AK,AQ,AJs,AJo:0.9037,ATs:0.0024,ATo:0.5678"
这是应该的结果
dput(result)
c("AA,KK,QQ,JJ,TT,99,88:0.5083", "66,55:0.8303", "AK,AQ,AJs,AJo:0.9037",
"ATs:0.0024", "ATo:0.5678")
这里有一个带有 strsplit
的选项 - 将 .
和一位或多位数字 (\d+
) 后面的 ,
替换为新的分隔符使用 gsub
,然后在 base R
strsplit
拆分
result1 <- strsplit(gsub("([0-9]\.[0-9]+),", "\1;", test), ";")[[1]]
-正在检查
> identical(result, result1)
[1] TRUE
如果字符数是固定的,使用正则表达式查找
result1 <- strsplit(test, "(?<=:.{6}),", perl = TRUE)[[1]]
也许我们可以像下面这样使用regmatches
> regmatches(test, gregexpr("(\w+,?)+:[0-9.]+", test))[[1]]
[1] "AA,KK,QQ,JJ,TT,99,88:0.5083" "66,55:0.8303"
[3] "AK,AQ,AJs,AJo:0.9037" "ATs:0.0024"
[5] "ATo:0.5678"