gpt4 book ai didi

根据与 dplyr 的部分匹配替换数据帧中任意位置的整个字符串

转载 作者:行者123 更新时间:2023-12-04 12:33:32 24 4
gpt4 key购买 nike

我正在努力寻找正确的 dplyr 代码来使用 grepl或等效于替换整个数据框中的值。

即:任何包含“mazda”的单元格,都应该将其全部内容替换为新字符串“A car”

经过大量在线搜索后,我最接近的是:

重点是将其应用于所有列。

library(dplyr)
mtcars$carnames <- rownames(mtcars) # dummy data to test on

这一行可以使整个 sting 完全匹配:
mtcars %>% replace(., (.)=='Mazda RX4', "A car")

但是由于某种原因,我的 grepl 尝试将整个列替换为“A car”。
mtcars %>% replace(., grepl('Mazda', (.)), "A car")

最佳答案

library(dplyr)
mtcars %>% mutate_if(grepl('Mazda',.), ~replace(., grepl('Mazda', .), "A car"))

了解你为什么要先 replace失败看 'Mazda RX4'==mtcars的区别和 grepl('Mazda', mtcars) ,因为您使用了 grepl , replace用途

replace replaces the values in x with indices given in list by those given in values. If necessary, the values in values are recycled.



如果我们确保使用 sapply 获得合适的输出,现在我们可以使用您的第一种方法。例如
mtcars %>% replace(., sapply(mtcars, function(.) grepl('Mazda',.)), "A car")

更新:

要替换多个模式,我们可以使用 stringr::str_replace_all
library(stringr)
library(dplyr)
mtcars %>% mutate_if(str_detect(., 'Mazda|Merc'),
~str_replace_all(., c("Mazda.*" = "A car", "Merc.*" = "B car")))

关于根据与 dplyr 的部分匹配替换数据帧中任意位置的整个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57325081/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com