您好我有两个不同长度的数据框:
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 ...
它们都是整数 - 合并时会有所不同吗?
答案 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