合并两个数据帧以匹配具有不同长度的日期(不同标题)

时间:2017-06-02 19:10:41

标签: r

您好我有两个不同长度的数据框:

nrow(artdataframe1)
[1] 78
nrow(spdataframe)
[1] 7607

两个数据框的日期列为yyyymmdd

> head(artdataframe1)
   artdate artprice
1 19870330  $83.60 
2 19871111 $113.60 
3 19881128  $78.00 
4 19890509  $92.50 
5 19890531  $68.00 
6 19890801 $115.90 
> head(spdataframe)
  SP500close SP500date
1     289.20  19870330
2     291.70  19870331
3     292.39  19870401
4     293.63  19870402
5     300.41  19870403
6     301.95  19870406

我想加入这两个按日期匹配的数据帧。这意味着artdataframe1(nrow78)中的行将加入spdataframe(nrow7607)。这意味着在那些不匹配的NA值中会有很多NA值。

我从同一个.csv中提取了这两个数据帧,并且已经删除了artdataframe1中的NA行

artdataframe1 <- artdataframe[!is.na(artdataframe[,1]),]

所以这是一些背景。我试图使用这个命令,但它并不像我期望的那样匹配日期:

newdf <- merge(spdataframe, artdataframe1, by = intersect(names(SP500date), names(artdate)),
      by.spdataframe = by, by.artdataframe1 = by, all = FALSE, all.spdataframe = all, all.artdataframe1 = all,
      sort = TRUE, suffixes = c(".spdataframe",".artdataframe1"),
      incomparables = NULL)

任何进一步的指导/协助将不胜感激。

由于

让我添加一下,这是每个数据帧的类:

> str(artdataframe1)
'data.frame':   78 obs. of  2 variables:
 $ artdate : int  19870330 19871111 19881128 19890509 19890531 19890801 19891127 19891130 19900515 19900517 ...
 $ artprice: Factor w/ 74 levels "","$102.10 ",..: 58 10 49 66 36 11 52 69 21 18 ...
> str(spdataframe)
'data.frame':   7607 obs. of  2 variables:
 $ SP500close: num  289 292 292 294 300 ...
 $ SP500date : int  19870330 19870331 19870401 19870402 19870403 19870406 19870407 19870408 19870409 19870410 ...

它们都是整数 - 合并时会有所不同吗?

1 个答案:

答案 0 :(得分:1)

您应该发布dplyr::*_join()个功能。

library(dplyr)

full_join(df1, df2, by = c("artdate" = "SP500date"))

#> # A tibble: 11 x 3
#>     artdate artprice SP500close
#>       <int>    <chr>      <dbl>
#>  1 19870330   $83.60     289.20
#>  2 19871111  $113.60         NA
#>  3 19881128   $78.00         NA
#>  4 19890509   $92.50         NA
#>  5 19890531   $68.00         NA
#>  6 19890801  $115.90         NA
#>  7 19870331     <NA>     291.70
#>  8 19870401     <NA>     292.39
#>  9 19870402     <NA>     293.63
#> 10 19870403     <NA>     300.41
#> 11 19870406     <NA>     301.95