R:列 1 中的字符串匹配从列 2 的行中选择数据以创建列 3?



我试图从column1获得字符串匹配,然后仅从column2的相应行中选择该数据,以便使用column2的字符串匹配行中的数据创建column3

我希望这是清楚的。

的例子:部分字符串"dog"

DF
#   Column1      column2  column3
#1    doggy            x        x
#2      cat            y       
#3     bird            y
#4    doggy            z        z
#5      cat            x
#6     bird            y

谢谢!

我们可以用dplyrstringr包来完成这个任务。

使用mutate创建新的column3变量

case_when允许向量化if_else()。它是一个双面公式,使用str_detect来检测Column1中所提供模式的存在。如果模式存在,则column2中的值将在column3中返回。如果模式不存在,则不返回任何值(由TRUE ~ ""部分表示)。

谢谢你的数据,Ronak!

df <- structure(list(Column1 = c("doggy", "cat", "bird", "doggy", "cat", 
"bird"), column2 = c("x", "y", "y", "z", "x", "y")), 
class = "data.frame", row.names = c(NA, -6L))

library(dplyr)
library(stringr)
df %>% 
mutate(
column3 = case_when(
str_detect(Column1, "dog") ~ column2,
TRUE ~ ""
)
)
#>   Column1 column2 column3
#> 1   doggy       x       x
#> 2     cat       y        
#> 3    bird       y        
#> 4   doggy       z       z
#> 5     cat       x        
#> 6    bird       y

由reprex包(v0.3.0)在20121-03-11创建

我们可以使用ifelsegrepl:

transform(df, column3 = ifelse(grepl('dog', Column1), column2, ''))
#  Column1 column2 column3
#1   doggy       x       x
#2     cat       y        
#3    bird       y        
#4   doggy       z       z
#5     cat       x        
#6    bird       y        

df <- structure(list(Column1 = c("doggy", "cat", "bird", "doggy", "cat", 
"bird"), column2 = c("x", "y", "y", "z", "x", "y")), 
class = "data.frame", row.names = c(NA, -6L))

最新更新