【问题标题】:Loop for Multiple Vlookup in RR中的多个Vlookup循环
【发布时间】:2014-11-27 13:07:44
【问题描述】:

我有一个如下所示的数据框:

lhs1=c("A","D","C","B")
lhs2=c("B","A","C","I")
lhs3=c("I","B","A","D")
lhs4=c("A","C","B","D")

df <- data.frame(lhs1,lhs2,lhs3,lhs4)



   lhs1 lhs2 lhs3 lhs4
1    A    B    I    A
2    D    A    B    C
3    C    C    A    B
4    B    I    D    D

我想再添加四列,显示基于此数据框上的值的每个字母的销售情况:

category <- c("A","B","C","D","E","I")
sale <- c(12,23,34,35,38,42)
look <- data.frame(category,sale)

category sale
      A   12
      B   23
      C   34
      D   35
      E   38
      I   42

所以我的数据框将如下所示:

lhs1    lhs2    lhs3    lhs4    lhs1.sale   lhs2.sale   lhs3.sale   lhs4.sale
   A       B       I       A       12         23            42         12
   D       A       B       C       35         12            23         34
   C       C       A       B       34         34            12         23
   B       I       D       D       23         42            35         35

请帮助我创建一个循环,而不是为 R 创建多个 vlookup。

【问题讨论】:

    标签: r loops dataframe vlookup


    【解决方案1】:

    试试这个

    df[paste(names(df), "sale", sep = ".")] <- look$sale[match(unlist(df), look$category)]
    df
    #   lhs1 lhs2 lhs3 lhs4 lhs1.sale lhs2.sale lhs3.sale lhs4.sale
    # 1    A    B    I    A        12        23        42        12
    # 2    D    A    B    C        35        12        23        34
    # 3    C    C    A    B        34        34        12        23
    # 4    B    I    D    D        23        42        35        35
    

    【讨论】:

      【解决方案2】:

      这是一个 data.table 解决方案。

      library(data.table)
      setkey(setDT(look),category)      # convert look to data.table; index on category
      cn <- paste0(names(df),".sales")  # names for the new columns
      setDT(df)[,c(cn):=lapply(.SD,function(col)look[col]$sale)]
      df
      #    lhs1 lhs2 lhs3 lhs4 lhs1.sales lhs2.sales lhs3.sales lhs4.sales
      # 1:    A    B    I    A         12         23         42         12
      # 2:    D    A    B    C         35         12         23         34
      # 3:    C    C    A    B         34         34         12         23
      # 4:    B    I    D    D         23         42         35         35
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-12-04
        • 1970-01-01
        • 2015-03-24
        • 2014-10-02
        • 1970-01-01
        • 2017-05-03
        • 1970-01-01
        相关资源
        最近更新 更多