簡體   English   中英

R:來自 column1 的字符串匹配從 column2 的行中選擇數據以創建 column3?

[英]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

謝謝!

我們可以使用dplyrstringr包來實現這一點。

使用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 日創建

我們可以將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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM