R 查找字符串中分隔两个子字符串的字符数
我有一个数据帧,R 查找字符串中分隔两个子字符串的字符数,r,R,我有一个数据帧,df,看起来像: string substring abcxxxxxZxxabc abc defxdefxZxdefx def 我想要一个距离栏: string substring distances abcxxxxxZxxabc abc 5, 2 defxdefxZxdefx def 5, 1, 1
df
,看起来像:
string substring
abcxxxxxZxxabc abc
defxdefxZxdefx def
我想要一个距离栏:
string substring distances
abcxxxxxZxxabc abc 5, 2
defxdefxZxdefx def 5, 1, 1
我主要想做的是找到df$substring
中的字符串和df$string
中的“Z”之间的“距离”(中间的字符数)
距离的顺序并不重要,如果重要的话,df$string
中的所有内容都是相同的长度,“Z”始终位于相同的位置。我们可以使用
library(dplyr)
library(stringr)
library(purrr)
df1 %>%
mutate(new = map2(str_extract_all(string,
sprintf('(?<=%s).*(?=Z)|(?<=Z).*(?=%s)', substring, substring)),
substring, ~{
n <- nchar(.x)
i1 <- str_detect(.x, .y)
c(n, nchar(str_remove(.x[i1], str_c(".*", .y))))
}))
库(dplyr)
图书馆(stringr)
图书馆(purrr)
df1%>%
mutate(new=map2(str_extract_all)(字符串,
sprintf(')(?我们可以使用
library(dplyr)
library(stringr)
library(purrr)
df1 %>%
mutate(new = map2(str_extract_all(string,
sprintf('(?<=%s).*(?=Z)|(?<=Z).*(?=%s)', substring, substring)),
substring, ~{
n <- nchar(.x)
i1 <- str_detect(.x, .y)
c(n, nchar(str_remove(.x[i1], str_c(".*", .y))))
}))
库(dplyr)
图书馆(stringr)
图书馆(purrr)
df1%>%
mutate(new=map2(str_extract_all)(字符串,
sprintf('(?这里是一个基本的R选项
transform(
df,
distance =
mapply(
function(x, y) {
u <- gregexpr(y, x)[[1]] - gregexpr("Z", x)[[1]]
toString(ifelse(u < 0, -(u + nchar(y)), u - 1))
},
string,
substring,
USE.NAMES = FALSE
)
)
这是一个基本的R选项
transform(
df,
distance =
mapply(
function(x, y) {
u <- gregexpr(y, x)[[1]] - gregexpr("Z", x)[[1]]
toString(ifelse(u < 0, -(u + nchar(y)), u - 1))
},
string,
substring,
USE.NAMES = FALSE
)
)
这似乎找到了“距离”例如,将第二行中的字符串更改为defxdefxZxxdefx
应该返回5,1,2
,但它返回5,2
。有什么办法解决这个问题吗?@initialruser19对于该stirng,“def”之间的字符数'和'Z'是5,Z和def是2,最后一种情况是defx
结尾没有任何'Z',这可能是误解,但是defx
结尾有一个'Z'。子字符串是defxZ
,应该给出一个“距离”有没有办法解释这个问题?@初学者Ruser19您的字符串是defxdefxZxdefx
在end@beginnerRuser19根据当前代码,我得到了sceondIt的5,1
,似乎这样可以找到“距离”例如,将第二行中的字符串更改为defxdefxZxxdefx
应该返回5,1,2
,但它返回5,2
。有什么办法解决这个问题吗?@initialruser19对于该stirng,“def”之间的字符数'和'Z'是5,Z和def是2,最后一种情况是defx
结尾没有任何'Z',这可能是误解,但是defx
结尾有一个'Z'。子字符串是defxZ
,应该给出一个“距离”有没有办法解释这个问题?@初学者Ruser19您的字符串是defxdefxZxdefx
在end@beginnerRuser19使用当前代码,我得到第二个代码的5,1