【问题标题】:Extract string up to a different word in each row - R将字符串提取到每行中的不同单词 - R
【发布时间】:2021-10-13 17:29:16
【问题描述】:

我有一个数据框,其中有一列包含各种单词。我还有一个单独的字符串列表(与 df 的长度不同),我想在数据框中创建一个新列,将字符串与列中的单词匹配,但只保留字符串的一部分直到那个词。

例如: 我有这张桌子:

words
apple
plant
banana
animal
fly
ecoli

还有这些字串:

stringlist <- c("eukaryote;plant;apple", "eukaryote;plant;banana","eukaryote;animal;dog", "eukaryote;plant;orange" "eukaryote;animal;cat"; "eukaryote;insect;fly", "prokaryote;bacterium;ecoli")

我想得到这个:

words new_words
apple eukaryote;plant;apple
plant eukaryote;plant
banana eukaryote;plant;banana
animal eukaryote;animal
fly eukaryote;insect;fly
ecoli prokaryote;bacterium;ecoli

我尝试过类似的方法:

df$words <- c("apple", "plant", "banana", "animal", "fly", "ecoli")
df$new_words<- sub(df$words, "", stringlist)

【问题讨论】:

    标签: r


    【解决方案1】:

    遍历'words'列,得到与grep匹配的'stringlist'值,使用sub捕获包含单词的字符,并将其替换为捕获组的反向引用(\\1

    df$new_words <- sapply(df$words, function(x) 
        sub(sprintf("(.*%s).*", x), "\\1", grep(x, stringlist, 
         value = TRUE)[1]))
    

    -输出

    > df
       words                  new_words
    1  apple      eukaryote;plant;apple
    2  plant            eukaryote;plant
    3 banana     eukaryote;plant;banana
    4 animal           eukaryote;animal
    5    fly       eukaryote;insect;fly
    6  ecoli prokaryote;bacterium;ecoli
    

    数据

    df <- structure(list(words = c("apple", "plant", "banana", "animal", 
    "fly", "ecoli")), class = "data.frame", row.names = c(NA, -6L
    ))
    
    stringlist <- c("eukaryote;plant;apple", "eukaryote;plant;banana", 
    "eukaryote;animal;dog", 
    "eukaryote;plant;orange", "eukaryote;animal;cat", "eukaryote;insect;fly", 
    "prokaryote;bacterium;ecoli")
    

    【讨论】:

    • 这很好用!!谢谢!
    猜你喜欢
    • 1970-01-01
    • 2017-02-04
    • 1970-01-01
    • 2018-10-11
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多