使用另一个数据帧作为R中的键替换数据帧中的所有值
我有两个数据帧,我想用df2中的等效值(df2$value)替换df1的所有值(在所有列中) df1 df2 所需的输出如下所示: 到目前为止,我在另一篇类似的帖子中也提到了这一点,但效果并不好(随机遗漏了一些要点)使用另一个数据帧作为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
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)])