我有一个包含四个变量和品牌列表的数据框。我需要替换/替换引用另一个数据框中的值的品牌名称值。我创建的数据是虚构的,但希望能提供一个现实的例子来说明为什么我需要这样的东西。假设变量代表四个团队,而这些是团队工作的品牌。有时我们需要重命名一个品牌以使其与“ Brand X”失去联系。 这是团队和品牌的数据框
team_a <- c("Apple", "IBM", "HSBC", "BA", "Diageo", "","")
team_b <- c("Microsoft", "Google", "Asus", "Bethesda", "HSBC", "Pernod", "Diageo")
team_c <- c("Facebook", "Samsung", "BMW", "Google", "P&G", "Sony", "")
team_d<- c("IBM", "Apple", "Microsoft", "Facebook", "HSBC", "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", "Facebook", "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"
但是,将替换/替换功能与参考数据帧一起使用会更加有效。我一直运气不好。我见过的大多数示例都基于一个变量,因此人们一直在使用合并/替换路由。这涉及多个变量,我看不到使用合并的方法。如果有这样做的方法,将非常感谢您的帮助,或者如果您可以向我介绍正确的程序包/功能的方向,那也将是非常有用的。预先非常感谢。
答案 0 :(得分:1)
一个选择是从参考数据集('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