首页 文章

根据另一个数据框替换数据帧中的值

提问于
浏览
5

我有以下两个数据帧:

>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)]

不幸的是,我正在使用大量数据集,因此希望一次匹配所有列 . 任何帮助将非常感激 .

2 回答

  • 2

    另一种可能的方案

    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
    
  • 3

    你可以做:

    df1[] <- setNames(df2$B, df2$A)[as.character(unlist(df1))]
    

相关问题