首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建新列以显示dplyr中跨字符串的部分匹配。

创建新列以显示dplyr中跨字符串的部分匹配。
EN

Stack Overflow用户
提问于 2018-08-13 11:44:57
回答 3查看 606关注 0票数 3

我正在尝试创建一个新列,以显示在我的dataframe中的两个列中是否存在跨字符串的匹配。This question几乎是我所要求的,但是我不想过滤,而是创建一个新的列来显示是否有匹配(真还是假)。

下面是一个示例dataframe:

代码语言:javascript
复制
 transcript        target
 he saw the dog    saw
 she gave them it  gave
 watch out for     danger
 real bravery      brave

我想要创建一个新的列,显示两者之间的任何匹配:

代码语言:javascript
复制
 transcript        target    match
 he saw the dog    saw        T
 she gave them it  gave       T
 watch out for     danger     F
 real bravery      brave      T

我更喜欢使用dplyr(),但我愿意接受其他建议!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-08-13 11:50:24

使用stringr::str_detect,我们可以检查transcript是否包含target

代码语言:javascript
复制
library(stringr)
library(dplyr)
df %>% mutate_if(is.factor, as.character) %>%    #If transcript and target are character class  in your df then no need to this step
       mutate(match = str_detect(transcript,target))


         transcript target match
1   he saw the dog    saw  TRUE
2 she gave them it   gave  TRUE
3    watch out for danger FALSE
4     real bravery  brave  TRUE
票数 3
EN

Stack Overflow用户

发布于 2018-08-13 11:59:24

您要求使用dplyr方法,但这里还有一个使用grepl的基R方法

代码语言:javascript
复制
df1$match <- mapply(grepl, df1$target, df1$transcript)

df1
        transcript target match
1   he saw the dog    saw  TRUE
2 she gave them it   gave  TRUE
3    watch out for danger FALSE
4     real bravery  brave  TRUE

在dplyr变体语句中使用grepl

代码语言:javascript
复制
df1 %>% 
  mutate(match = mapply(grepl, target, transcript))

        transcript target match
1   he saw the dog    saw  TRUE
2 she gave them it   gave  TRUE
3    watch out for danger FALSE
4     real bravery  brave  TRUE
票数 2
EN

Stack Overflow用户

发布于 2018-08-13 12:15:29

可以使用dplyr::rowwise()grepl创建match列,如下所示:

代码语言:javascript
复制
library(dplyr)

df %>% rowwise() %>%
  mutate(match  = grepl(target,transcript)) %>%
  as.data.frame()

#         transcript target match
# 1   he saw the dog    saw  TRUE
# 2 she gave them it   gave  TRUE
# 3    watch out for danger FALSE
# 4     real bravery  brave  TRUE

数据:

代码语言:javascript
复制
df <- read.table(text = 
"transcript        target
'he saw the dog'    saw
'she gave them it'  gave
'watch out for'     danger
'real bravery'      brave",
header = TRUE, stringsAsFactors = FALSE)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51821601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档