2017-06-02 33 views
2

您好我有具有不同長度的兩個數據幀:合併兩個數據幀以匹配日期(不同的標題)具有不同長度

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值很好。

我把這兩dataframes來自同一.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

'newdf < - 合併(spdataframe,artdataframe1,by.x = 「artdate」,by.y = 「SP500date」 時,所有= TRUE)'' – HubertL

+0

$ spdataframe的網上< - artdataframe1 $的網上[ artdataframe1 $ artdate%in%spdataframe $ SP500date]' – Masoud

回答

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 
+0

工作完美!謝謝 –

+0

@AndrewBannerman太棒了,很高興它有幫助。 (你介意投票並接受答案嗎? - 謝謝) – austensen

+0

我需要+15才能算!當我達到那個狀態時,我會在這裏查看並且這樣做! –

相關問題