使用另一个数据帧作为R中的键替换数据帧中的所有值

使用另一个数据帧作为R中的键替换数据帧中的所有值,r,dataframe,replace,dplyr,remap,R,Dataframe,Replace,Dplyr,Remap,我有两个数据帧,我想用df2中的等效值(df2$value)替换df1的所有值(在所有列中) df1 df2 所需的输出如下所示: 到目前为止,我在另一篇类似的帖子中也提到了这一点,但效果并不好(随机遗漏了一些要点) key=df2$Cell\u ID value=df2$value lapply(1:8,FUN=function(i){df1[df1==key[i]]]一个选项是将第二个数据集的元素与“Cell_ID”匹配,并将其作为索引从“df2”返回相应的“value” librar

我有两个数据帧,我想用df2中的等效值(df2$value)替换df1的所有值(在所有列中)

df1

df2

所需的输出如下所示:

到目前为止,我在另一篇类似的帖子中也提到了这一点,但效果并不好(随机遗漏了一些要点)

key=df2$Cell\u ID
value=df2$value

lapply(1:8,FUN=function(i){df1[df1==key[i]]]一个选项是将第二个数据集的元素与“Cell_ID”匹配,并将其作为索引从“df2”返回相应的“value”

library(dplyr)
df1 %>%
     mutate(across(everything(), ~  df2$value[match(., df2$Cell_ID)]))
-输出

#  Cell_ID n_1 n_2  n_3 n_4 n_5 n_6  n_7
#1     700   5 900 1000  NA  NA  NA   NA
#2     200   5 100  400 500 700 900 1000
#3     300   5 400  500  NA  NA  NA   NA
#4    1000   5 100  200 400 600 800  300

或者另一种选择是使用命名向量进行匹配

library(tibble)
df1 %>%
      mutate(across(everything(), ~ deframe(df2)[as.character(.)]))

base R
等效

df1[] <- lapply(df1, function(x) df2$value[match(x, df2$Cell_ID)])
df1[]
#  Cell_ID n_1 n_2  n_3 n_4 n_5 n_6  n_7
#1     700   5 900 1000  NA  NA  NA   NA
#2     200   5 100  400 500 700 900 1000
#3     300   5 400  500  NA  NA  NA   NA
#4    1000   5 100  200 400 600 800  300
library(tibble)
df1 %>%
      mutate(across(everything(), ~ deframe(df2)[as.character(.)]))
df1[] <- lapply(df1, function(x) df2$value[match(x, df2$Cell_ID)])