![](/img/trans.png)
[英]subtract column1 (dataframe1) from column2 (dataframe2) based on matching column in both R
[英]R: String match from column1 selects data from column2's rows to create column3?
我試圖從column1
獲取字符串匹配,然后 select 僅從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 ~ ""
部分表示。
感謝您的數據,羅納克!
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 package (v0.3.0) 於 2021 年 3 月 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))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.