提取r中两个字符串之间的差异("相对补集")

Dar*_*can 6 string r

我找不到办法做到这一点......

raw_string <- "\"+001\", la bonne surprise de M. Jenn M. Ayache http://goo.gl/3EXxy6 via @MYTF1News"

clean_string <- "+001, la bonne surprise de Jenn Ayache"

desired_string <- "\"\"M. M. http://goo.gl/3EXxy6 via @MYTF1News"
Run Code Online (Sandbox Code Playgroud)

我不确定如何称之为这种转变.我会说"差异"(如在集合理论中,反对"联合"和"交集").一个更好的名字可能是"相对补充"(http://en.wikipedia.org/wiki/Complement_(set_theory)#Relative_complement).

我想要的字符串只有clean_string中缺少的所有字符,按照良好的顺序,每次出现时都会丢失一次,包括空格,标点符号和所有内容.

我设法做的最好不够好:

> a <- paste(Reduce(setdiff, strsplit(c(raw_string, clean_string), split = " ")), collapse = " ")
> a
[1] "\"+001\", M. http://goo.gl/3EXxy6 via @MYTF1News"
Run Code Online (Sandbox Code Playgroud)

kon*_*vas 1

我不知道字符串操作包之一中是否有为此实现的函数(我还没有遇到过)。这是一个(我认为)有效的实现

raw_string <- "\"+001\", la bonne surprise de M. Jenn M. Ayache http://goo.gl/3EXxy6 via @MYTF1News"
clean_string <- "+001, la bonne surprise de Jenn Ayache"
raw <- strsplit(raw_string, "")[[1]]
clean <- strsplit(clean_string, "")[[1]]
dif <- vector("list")
j <- 1
while(length(clean) > 0) {
    i <- match(clean[1], raw)
    if (i > 1) {
        dif[[j]] <- raw[seq_len(i - 1)]
        j <- j + 1
    }
    clean <- clean[-1]
    raw <- raw[-seq_len(i)]
}
dif[[j]] <- raw
paste(unlist(dif), collapse = "")
#[1] "\"\"M. M.  http://goo.gl/3EXxy6 via @MYTF1News"
Run Code Online (Sandbox Code Playgroud)