【问题标题】:replace value in dataframe based on another data frame根据另一个数据框替换数据框中的值
【发布时间】:2013-05-06 22:28:09
【问题描述】:

我有以下两个数据框:

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

不幸的是,我正在处理一个庞大的数据集,因此希望一次匹配所有列。任何帮助将不胜感激。

【问题讨论】:

    标签: r


    【解决方案1】:

    你可以这样做:

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

    【讨论】:

      【解决方案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
      

      【讨论】:

        猜你喜欢
        • 2019-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-31
        • 2019-05-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多