2017-06-02 8 views
2

を日付(異なる見出し)を一致させるために2つのデータフレームをマージしますこんにちは、私は長さの異なる2つのデータフレームがあります。が異なる長さで

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

を2つのデータフレームは、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 

として日付列を持っています私はこれらの2つのデータフレームを日付に合わせて結合したいと思います。これは、artdataframe1(nrow78)の行がspdataframe(nrow7607)に結合することを意味します。これは、一致しないものには多くのNA値が存在することを意味します。

私は同じ.csvファイルからこれらのデータフレームの両方を引っ張ると、既にだから、いくつかのバックグラウンドである

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

でartdataframe1でNA行を削除しました。私はこのコマンドを使用しようとしましたが、期待通りに日付ごとに一致していません:

これ以上のガイダンスや援助をいただければ幸いです。

おかげ

は私がこれを追加してみましょう、これは各データフレームのクラスである:

> 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 < - <' ' – HubertL

+0

spdataframe $ artprice(by.y = "SP500date"、すべて= TRUE、spdataframe、artdataframe1、by.x = "artdate")をマージ - artdataframe1 $ artprice [ 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にする必要があります!私がその状態に達すると、私はここに戻り、そうするでしょう! –

関連する問題