将数据帧中的值合并并替换为R中另一个数据帧中的值

将数据帧中的值合并并替换为R中另一个数据帧中的值,r,dataframe,replace,merge,R,Dataframe,Replace,Merge,我有两个数据帧:DF1和DF2,我想用DF2中的值替换DF1中的值 DF1: >DF1 DF1 V1 V2 V3 1 AA23 BB32 CC43 2 AA34 DD32 3 AA54 CC43 4 BB32 5 CC43 DD32 AA54 6 DD32 EE22 EE54 DF2: >DF2 DF2 col1 col2 1 AA23 a22 2 AA34 a23 3 AA54 a25 4 BB32 a27 5 CC43 b11 6 DD32 b13 7 EE22 b15 8 EE54 c1

我有两个数据帧:DF1和DF2,我想用DF2中的值替换DF1中的值

DF1:

>DF1 DF1
V1 V2 V3
1 AA23 BB32 CC43
2 AA34 DD32
3 AA54 CC43
4 BB32
5 CC43 DD32 AA54
6 DD32 EE22 EE54
DF2:

>DF2 DF2
col1 col2
1 AA23 a22
2 AA34 a23
3 AA54 a25
4 BB32 a27
5 CC43 b11
6 DD32 b13
7 EE22 b15
8 EE54 c11
9 EE55 c13
我想用DF2$col2中的值替换DF1中所有列中的所有值(保留NA)

这是我的DF_期末考试:

    > DF_final
   V1   V2   V3
1 a22  a27  b11
2 a23 <NA>  b13
3 a25  b11 <NA>
4 a27 <NA> <NA>
5 b11  b13  a25
6 b13  b15  c11
>DF_最终版本
V1 V2 V3
1 a22 a27 b11
2 a23 b13
3 a25 b11
4 a27
5 b11 b13 a25
6 b13 b15 c11

请问,有人能给我一些建议吗?谢谢。

我们可以使用命名向量和匹配

library(data.table)
setDT(DF1)[, lapply(.SD, function(x) 
     setNames(as.character(DF2$col2), DF2$col1)[as.character(x)])]
#   V1   V2   V3
#1: a22  a27  b11
#2: a23 <NA>  b13
#3: a25  b11 <NA>
#4: a27 <NA> <NA>
#5: b11  b13  a25
#6: b13  b15  c11
或者转换为
矩阵
,并进行匹配`

DF1[] <- setNames(as.character(DF2$col2), DF2$col1)[as.matrix(DF1)]

DF1[]这里是另一个使用
match
+
unlist
的基本R选项:

DF1[]<-DF2$col2[match(unlist(DF1),DF2$col1)]
DF1[]DF1
V1 V2 V3
1 a22 a27 b11
2 a23 b13
3 a25 b11
4 a27
5 b11 b13 a25
6 b13 b15 c11

对不起,这是个打字错误。现在它是对的。谢谢,我试过了,但没用。你能更好地解释你的建议吗?@Tfg1005对不起,那是我的错。纠正
DF1[] <- lapply(DF1, function(x) 
     setNames(as.character(DF2$col2), DF2$col1)[as.character(x)])
DF1[] <- setNames(as.character(DF2$col2), DF2$col1)[as.matrix(DF1)]
DF1[]<-DF2$col2[match(unlist(DF1),DF2$col1)]
> DF1
   V1   V2   V3
1 a22  a27  b11
2 a23 <NA>  b13
3 a25  b11 <NA>
4 a27 <NA> <NA>
5 b11  b13  a25
6 b13  b15  c11