如何解决用另一个数据框不是合并引用的值替换/替换一个数据框中的所有值
我有一个包含四个变量和品牌列表的数据框。我需要替换/替换引用另一个数据框中的值的品牌名称值。我创建的数据是虚构的,但希望能提供一个现实的例子来说明为什么我需要这样的东西。假设变量代表四个团队,而这些是团队工作的品牌。有时我们需要重命名一个品牌以使其与“ Brand X”失去联系。 这是团队和品牌的数据框
team_a <- c("Apple","IBM","HSBC","BA","Diageo","","")
team_b <- c("Microsoft","Google","Asus","Bethesda","Pernod","Diageo")
team_c <- c("Facebook","Samsung","BMW","P&G","Sony","")
team_d<- c("IBM","Apple","Microsoft","Facebook","McDonalds","")
df <- data.frame(team_a,team_b,team_c,team_d)
> df
team_a team_b team_c team_d
1 Apple Microsoft Facebook IBM
2 IBM Google Samsung Apple
3 HSBC Asus BMW Microsoft
4 BA Bethesda Google Facebook
5 Diageo HSBC P&G HSBC
6 Pernod Sony McDonalds
7 Diageo
这是参考数据框
Old_Name <- c("Apple","Google")
New_Name <- c("Brand X","Brand Y","Brand Z")
df2 <- data.frame(cbind(Old_Name,New_Name))
> df2
Old_Name New_Name
1 Apple Brand X
2 Facebook Brand Y
3 Google Brand Z
最终数据框应如下图所示
> df
team_a team_b team_c team_d
1 Brand X Microsoft Brand Y IBM
2 IBM Brand Z Samsung Brand X
3 HSBC Asus BMW Microsoft
4 BA Bethesda Brand Z Brand Y
5 Diageo HSBC P&G HSBC
6 Pernod Sony McDonalds
7 Diageo
当然,我可以为每个品牌手动这样做
df[df=="Apple"] <- "Brand X"
但是,将替换/替换功能与参考数据帧一起使用会更加有效。我一直运气不好。我见过的大多数示例都基于一个变量,因此人们一直在使用合并/替换路由。这涉及多个变量,我看不到使用合并的方法。如果有这样做的方法,将非常感谢您的帮助,或者如果您可以向我介绍正确的程序包/功能的方向,那也将是非常有用的。预先非常感谢。
解决方法
一个选择是从参考数据集('df2')创建命名向量(deframe
),使用across
在数据集('df')的列上循环,使用命名的向量以匹配并替换匹配的元素,而不匹配返回NA
,然后使用NA
coalesce
替换为原始列值
library(dplyr) # >= 1.0.0
library(tibble)
df %>%
mutate(across(everything(),~ coalesce(deframe(df2)[.],.)))
# team_a team_b team_c team_d
#1 Brand X Microsoft Brand Y IBM
#2 IBM Brand Z Samsung Brand X
#3 HSBC Asus BMW Microsoft
#4 BA Bethesda Brand Z Brand Y
#5 Diageo HSBC P&G HSBC
#6 Pernod Sony McDonalds
#7 Diageo
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。