我试图从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
谢谢!
我们可以用dplyr
和stringr
包来完成这个任务。
使用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创建
我们可以使用ifelse
和grepl
:
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))