替换基于另一个数据帧中数据帧值
问题描述:
我有以下两个dataframes:替换基于另一个数据帧中数据帧值
>df1<-data.frame(A=c(0,0,0),B=c(0,201,0),C=c(0,467,0))
A B C
1 0 0 1
2 0 201 467
3 0 0 0
>df2<-data.frame(A=c(201,467),B=c('abc','def'))
A B
1 201 abc
2 467 def
我想更换使用匹配在DF2“B”值DF1的值,产生一个数据帧,看起来像此:
A B C
1 NA NA NA
2 NA abc def
3 NA NA NA
我可以在逐列的基础使用以下代码实现这一点:
>df2$B[match(df1$B,df2$A)]
不幸的是,我正在处理大量数据集,因此宁愿一次匹配所有列。任何帮助将非常感激。
答
另一种可能的解决方案:
df1<-data.frame(A=c(0,0,0),B=c(0,201,0),C=c(0,467,0))
df2<-data.frame(A=c(201,467),B=c('abc','def'))
library(qdap)
apply(df1, 2, lookup, df2)
## > apply(df1, 2, lookup, df2)
## A B C
## [1,] NA NA NA
## [2,] NA "abc" "def"
## [3,] NA NA NA
答
你可以这样做:
df1[] <- setNames(df2$B, df2$A)[as.character(unlist(df1))]