簡體   English   中英

r、dplyr:如何使用 gsub 根據另一列中的值轉換一列中的值

[英]r, dplyr: how to transform values in one column based on value in another column using gsub

我有一個具有兩個(相關)因素的 dataframe,我想從另一個因素的值中刪除一個等於一個因素的 substring,或者如果沒有這樣的 substring,則不理會它。 我可以使用dplyr做到這一點嗎?

要制作 MWE,假設這些因素是xy

library(dplyr)
df <- data.frame(x = c(rep('abc', 3)), y = c('a', 'b', 'd'))

df

      x y
1   abc a
2   abc b
3   abc d

我想要的是:

      x y
1    bc a
2    ac b
3   abc d

我的嘗試是:

df |> transform(x = gsub(y, '', x))

但是,這會產生以下不正確的結果以及警告消息:

    x y
1  bc a
2  bc b
3  bc d

 Warning message:
 In gsub(y, "", x) :
    argument 'pattern' has length > 1 and only the first element will be used

我怎樣才能做到這一點?

str_remove針對pattern而不是gsub進行矢量化

library(stringr)
library(dplyr)
df <- df %>% 
    mutate(x = str_remove(x, y))

-輸出

df
    x y
1  bc a
2  ac b
3 abc d

如果我們想使用sub/gsub ,那么可能需要rowwise

df %>%
   rowwise %>%
   mutate(x = sub(y, "", x)) %>%
   ungroup

暫無
暫無

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

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