这个问题在这里已有答案:
-
How to join (merge) data frames (inner, outer, left, right) 13个答案
-
Transpose / reshape dataframe without “timevar” from long to wide format 6个答案
-
Convert data from long format to wide format with multiple measure columns 4个答案
我有两个数据帧(df1和df2),其示例如下所示:
df1 <- data.frame(StationID = c(1,1,1,2,2,3,3,3,3,3),
Cameras = c("Cam1","Cam2","Cam2","Cam1","Cam1","Cam2","Cam1","Cam2","Cam1","Cam1"),
Start = c("2013-04-23","2013-04-23","2013-04-23","2013-04-23","2013-04-23","2013-04-23","2013-04-23","2013-04-23","2013-04-23","2013-04-23"),
End = c("2013-04-25","2013-04-25","2013-04-25","2013-04-25","2013-04-25","2013-04-25","2013-04-25","2013-04-25","2013-04-25","2013-04-25"))
df2 <- data.frame(StationID = c(1,1,2,2,3,3),
Cameras = c("Cam1","Cam2","Cam1","Cam2","Cam1","Cam2"))
我想生成一个新的数据帧(df3),它在两列(StationID和Cameras)之间寻找匹配,然后将“Start”和“End”日期列附加到相应的匹配项 . 代码需要根据数据动态添加新列,因为某些实例没有匹配项,而其他实例将有许多匹配项 .
示例输出如下:
StationID Cameras Start1 End1 Start2 End2 Start3 End3
1 1 Cam1 2013-04-23 2013-04-25 <NA> <NA> <NA> <NA>
2 1 Cam2 2013-04-23 2013-04-25 2013-04-23 2013-04-25 <NA> <NA>
3 2 Cam1 2013-04-23 2013-04-25 2013-04-23 2013-04-25 <NA> <NA>
4 2 Cam2 <NA> <NA> <NA> <NA> <NA> <NA>
5 3 Cam1 2013-04-23 2013-04-25 2013-04-23 2013-04-25 2013-04-23 2013-04-25
6 3 Cam2 2013-04-23 2013-04-25 2013-04-23 2013-04-25 <NA> <NA>
我很感激这项任务的任何帮助 .
提前致谢!
2 回答
我们加入两个数据集
on
'StationID'和'Cameras'并使用data.table
中的dcast
,它可以将多个value.var
列重新整形为'wide'格式 .注意:
rowid
来自data.table_1.9.7 . 它可以从here安装 . 如果我们有1.9.6或更早版本,请创建rowid然后做
dcast
也许这很有帮助