通过扩展两次,首先是“年”,然后是“月”,将数据重塑为长格式

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

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


df_output <- data.frame(year= c(2001,2001,2002,2003,2003),month = c("1","2","3","1","3"),village = c("A","A","C",population = c (1000,1000,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

知道我做错了什么吗?

iCMS 回答:通过扩展两次,首先是“年”,然后是“月”,将数据重塑为长格式

如果我理解正确,OP 想要创建 cross join笛卡尔合并

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

返回与上面相同的结果。

本文链接:https://www.f2er.com/134207.html

大家都在问