根据R中另一列中字符串的一部分更改列值

时间:2018-03-20 09:44:13

标签: r string replace row

我是R的新手,请耐心等待!我有一个名为mydata的数据框。以下是相关列的示例:

Backlog.Item.Type       Description
Feature                  Assignment 1  
Product Backlog Item     As a user I want to                                                           
Task                     Do this    

现在,我想要完成的是:如果Description中的部分字符串匹配'作为'或者'作为',我想用{00}用户故事'替换Backlog.Item.Type列的行值。要选择这些行,我使用

x <- mydata[grepl("As a", mydata[["Description"]]) | grepl("As an", mydata[["Description"]]), ]

但是,我不知道如何替换Backlog.Item.Type列中的相应值。这可能很简单,但任何帮助将不胜感激!在此先感谢,我希望我已经足够清楚,并以可理解的方式提出我的问题!

2 个答案:

答案 0 :(得分:0)

我想会有一个更优雅的解决方案,不过这样就可以解决问题了:

    library(stringr)
df=tibble(Backlog=c("Feature","Product","Task"),Description=c("Assignment 1","As a user i want to","Do this"))
matches<-c("a user","an user")
matchTable=sapply(matches,function(x) str_detect(df$Description,x))
rows=sapply(1:nrow(df),function(x) any(matchTable[x,1],matchTable[x,2]))
df$Description[rows]='User Story'

答案 1 :(得分:0)

library(stringr)
library(dplyr)

mydata %>%
  mutate(
      Backlog.Item.Type = case_when(
        str_detect(mydata$description, "As a") | str_detect(mydata$description, "As an") ~ "User Story",
        !(str_detect(mydata$description, "As a") | str_detect(mydata$description, "As an"))) ~ Backlog.Item.Type
      )
    )