【问题标题】:How to merge data to form a panel?如何合并数据形成面板?
【发布时间】:2014-01-28 09:06:43
【问题描述】:

我有两个数据框。数据框“天气”如下所示:

weather<-data.frame(Date=c("2012-04-01","2012-04-02","2012-04-03","2012-04-04"),Day=c("Sunday","Monday","Tuesday","Wednesday"), Temp=c(86,89,81,80))
Date       Day       Temperature    
2012-04-01 Sunday     86
2012-04-02 Monday     89
2012-04-03 Tuesday    81
2012-04-04 Wednesday  80

而且,数据框“Regularity”如下所示:

Regularity<-data.frame(Date=c("2012-04-02","2012-04-04","2012-04-03","2012-04-04"),EmployeeID=c(1,1,2,2),Attendance=c(1,1,1,1))

Date        EmployeeID Attendance
2012-04-02           1          1
2012-04-04           1          1
2012-04-03           2          1
2012-04-04           2          1

我想用 R 格式创建一个面板数据框:

Date       Day       Temperature EmployeeID Attendence  
2012-04-01 Sunday     86              1         0
2012-04-02 Monday     89              1         1
2012-04-03 Tuesday    81              1         0
2012-04-04 Wednesday  80              1         1
2012-04-01 Sunday     86              2         0
2012-04-02 Monday     89              2         0
2012-04-03 Tuesday    81              2         1
2012-04-04 Wednesday  80              2         1

我已经尝试过 merge 和 reshape2,但没有成功。我将非常感谢任何帮助。谢谢。

【问题讨论】:

  • 这个问题似乎主要是关于代码的,这将更适合SO。
  • plyr 包中还有 join - df &lt;- join(weather, Regularity, by=c("Date")) - 尽管合并也应该完成这项工作。错误信息是什么?

标签: dataset panel-data


【解决方案1】:

这里是如何。假设tb1 是第一个表,tb2 是第二个表。然后通过以下方式达到预期的结果:

tb2_tf<-dcast(tb2,Date~EmployeeID,value.var="Attendance")
tb<-melt(merge(tb1,tb2_tf,all=TRUE),id=1:3,variable.name="EmployeeID",value.name="Attendance")
tb$Attendance[is.na(tb$Attendance)] <- 0
tb
       Date       Day Temperature EmployeeID Attendance
1 2012-04-01    Sunday          86          1          0
2 2012-04-02    Monday          89          1          1
3 2012-04-03   Tuesday          81          1          0
4 2012-04-04 Wednesday          80          1          1
5 2012-04-01    Sunday          86          2          0
6 2012-04-02    Monday          89          2          0
7 2012-04-03   Tuesday          81          2          1
8 2012-04-04 Wednesday          80          2          1

我希望看到没有重塑部分的解决方案。我怀疑有一个使用某种形式的 theta join。

【讨论】:

  • 感谢 Mpiktas。虽然这就像一个魅力,但我不明白 id=1:3 部分。这指的是什么 id?当我在原始的大型数据集中尝试此操作时,我收到错误:“在数据中找不到 id 变量:NA”,如果我没有选择 id,则会选择默认 id,这会产生奇怪的结果。非常感谢您的帮助。
  • id=1:3 只是前三列。
  • 再次感谢。在主要的大型数据集中,我收到“缺少聚合函数:默认为长度”的 dcast 警告,并且所有行每行重复 3 次,如何防止这种情况发生?
  • 你应该将tb1的所有列添加到id中,这些列不在表tb2_tf中。
猜你喜欢
  • 1970-01-01
  • 2016-06-06
  • 2016-06-07
  • 1970-01-01
  • 2020-07-22
  • 1970-01-01
  • 2014-08-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多