【问题标题】:merge data frames in R in two dimensions二维合并R中的数据框
【发布时间】:2016-04-30 06:56:48
【问题描述】:

数据框架 1:房价

year    month   MSA1    MSA2    MSA3
2000    1       12  6   7
2000    2       1   3   4
2001    3       9   5   7

数据框 2:抵押信息

ID  MSA YEAR    MONTH   
1   MSA1    2000    2   
2   MSA3    2001    3   
3   MSA2    2001    3   
4   MSA1    2000    1   
5   MSA3    2000    3   

期望的结果:

ID  MSA YEAR    MONTH   HOUSE_PRICE
1   MSA1    2000    2   1
2   MSA3    2001    3   7
3   MSA2    2001    3   5

有人知道如何以有效的方式实现这一目标吗?数据框 2 很大,数据框 1 大小还可以。谢谢!

【问题讨论】:

  • StackOverflow 不是编码写作服务。我们认真努力帮助解决问题。如果您遇到任何问题,请尝试并告诉我们。
  • 不清楚您要做什么。可以将第一个数据框强制转换为所需的结果,那么 df2 中需要合并的内容是什么?
  • @polka 我需要做类似“merge(df1, df2, by = c(year, month), where df2$MSA = the对应的MSA in df1)” 问题有两个: 一是不知道这个语法怎么写,二是df1中的MSA是headers,不知道怎么用“value=header”类型的比较....
  • @mtoto 的全部目的是将 df1 中的房价值添加到 df2 中。 df2 是主要数据。我需要在 df2 中添加额外的房价列。谢谢。

标签: r multidimensional-array merge dataframe


【解决方案1】:

假设两者都是 data.tables dt1dt2,则无需将它们转换为长格式即可,如下所示:

require(data.table)
dt2[dt1, .(ID, MSA, House_price = get(MSA)), by=.EACHI, 
           nomatch=0L, on=c(YEAR="year", MONTH="month")]
#    YEAR MONTH ID  MSA House_price
# 1: 2000     1  4 MSA1          12
# 2: 2000     2  1 MSA1           1
# 3: 2001     3  2 MSA3           7
# 4: 2001     3  3 MSA2           5

dt1 = fread('year    month   MSA1    MSA2    MSA3
2000    1       12  6   7
            2000    2       1   3   4
            2001    3       9   5   7
            ')

dt2 = fread('ID  MSA YEAR    MONTH   
1   MSA1    2000    2   
            2   MSA3    2001    3   
            3   MSA2    2001    3   
            4   MSA1    2000    1   
            5   MSA3    2000    3   
            ')

【讨论】:

    【解决方案2】:

    这看起来像是turning a data frame from wide to long form 然后merging two data frames 的情况。这是带有gatherright_join 的dplyr 解决方案。改名只是为了让加入更容易。

    library(dplyr)
    library(tidyr)
    names(df1) <- toupper(names(df1))
    gather(df1,MSA,HOUSE_PRICE,-YEAR,-MONTH) %>% 
      right_join(df2,by = c("YEAR","MONTH","MSA"))
    

    输出

      YEAR MONTH  MSA HOUSE_PRICE ID
    1 2000     2 MSA1           1  1
    2 2001     3 MSA3           7  2
    3 2001     3 MSA2           5  3
    4 2000     1 MSA1          12  4
    5 2000     3 MSA3          NA  5
    

    【讨论】:

      猜你喜欢
      • 2012-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-17
      • 1970-01-01
      相关资源
      最近更新 更多