【发布时间】:2021-08-20 10:55:59
【问题描述】:
这是我在 stackoverflow 上的第一篇文章,英语不是我的第一语言,所以对于语法和编程方面的任何错误,我会提前道歉。
我需要根据另一个数据框中的部分值替换我的数据框中的一列中的值。我的问题与post here 类似,但在他们的示例中,他们列出了所有可能的错误。就我而言,我只需要字符串的一部分就可以知道是否需要替换一个值。
我已经尝试在 dplyr 中使用“if_else”和“grepl”。只要我在第二个数据帧上只有一行,“Grepl”就可以工作,当我插入另一个示例时会出错。
现在我的真实 DF 有大约 30k 行和 33 个变量,并且具有正确值的第二个 DF 可能每个月都在增长,所以我尽量避免循环。
我用随机数据制作了一个模拟表来模拟我的需求:
library(dplyr)
df1 <- data.frame(Supplier = c("AAA","CCC","CCE","DDD","EEE","EED","GGG","HHH","III","JJJ"),
Value = c(100,200,300,400,200, 100,200,40,150,70))
df2 <- data.frame(Supplier =c("CC","EE","GG"),
New_Supplier = c("Red","Blue","Green"))
#Example 1: Unfortunately this Won't work unless I have an exact match:
df1$Supplier <- if_else(df1$Supplier %in% df2$Supplier, df2$New_Supplier, df1$Supplier)
# Example 2: Only works if I have one example:
df1$Supplier <- if_else(grepl(df2$Supplier, df1$Supplier), df2$New_Supplier, df1$Supplier)
所以我在第一个数据帧上有这个:
Supplier Value
1 AAA 100
2 CCC 200
3 CCE 300
4 DDD 400
5 EEE 200
6 EED 100
7 GGG 200
8 HHH 40
9 III 150
10 JJJ 70
这在第二个数据框上:
Supplier New_Supplier
1 CC Red
2 EE Blue
3 GG Green
我的最终目标是拥有这样的东西:
Supplier Value
1 AAA 100
2 Red 200
3 Red 300
4 DDD 400
5 Blue 200
6 Blue 100
7 Green 200
8 HHH 40
9 III 150
10 JJJ 70
提前致谢!
【问题讨论】: