【问题标题】:Reshape data into long format by expanding two times, first, by "year" and then by "month"通过扩展两次将数据重塑为长格式,首先是“年”,然后是“月”
【发布时间】:2021-07-07 16:00:52
【问题描述】:

我有很多带有唯一标识符(村庄)的村庄的数据,我正试图通过先按年扩展,然后按月扩展,将数据形成长格式。

df_input <- data.frame( village=c("A","B","C"), population = c(1000,1500,2000))    


df_output <- data.frame(year= c(2001,2001,2001,2002,2002,2002,2003,2003,2003),
                        month = c("1","2","3","1","2","3","1","2","3"),
                        village = c("A","A","A","B","B","B","C","C","C"), 
                        population = c (1000, 1000,1000,1500,1500,1500,2000,2000,2000))

我用下面的代码先按年展开:

df_panel <- df_input %>%
  merge(expand.grid(year=2001:2003, key=.$key), by="code_2011")

但我收到以下错误:

Error in fix.by(by.y, y) : 'by' must specify a uniquely valid column

知道我做错了什么吗?

【问题讨论】:

    标签: r panel reshape melt


    【解决方案1】:

    如果我理解正确,OP 想要创建 cross joincartesian merge of

    • 岁月2001:2003,
    • 1:3 的月份,以及
    • df_input的每一行。

    有几种方法可以实现这一点,例如,

    merge(list(year = 2001:2003), merge(list(month = 1:3), df_input))
    
       year month village population
    1  2001     1       A       1000
    2  2002     1       A       1000
    3  2003     1       A       1000
    4  2001     2       A       1000
    5  2002     2       A       1000
    6  2003     2       A       1000
    7  2001     3       A       1000
    8  2002     3       A       1000
    9  2003     3       A       1000
    10 2001     1       B       1500
    11 2002     1       B       1500
    12 2003     1       B       1500
    13 2001     2       B       1500
    14 2002     2       B       1500
    15 2003     2       B       1500
    16 2001     3       B       1500
    17 2002     3       B       1500
    18 2003     3       B       1500
    19 2001     1       C       2000
    20 2002     1       C       2000
    21 2003     1       C       2000
    22 2001     2       C       2000
    23 2002     2       C       2000
    24 2003     2       C       2000
    25 2001     3       C       2000
    26 2002     3       C       2000
    27 2003     3       C       2000
    

    或使用expand.grid()merge()

    merge(expand.grid(year = 2001:2003, month = 1:3), df_input)
    

    返回与上面相同的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-15
      • 2021-05-01
      • 2018-07-25
      • 1970-01-01
      • 2013-04-08
      相关资源
      最近更新 更多