2017-02-23 8 views
0

私は2つのデータセットRH.dataとCCをマージしています(下記参照)。異なる列、行、日付順のファイルを結合する

>head(RH.data) 
    date  RH 
1 2005-05-01 71.1 
2 2005-05-02 47.0 
3 2005-05-03 58.6 
4 2005-05-04 44.2 
5 2005-05-05 41.8 
6 2005-05-06 61.3 

> head(cc) 
X id  date case year month temp 
1 1 2005-05-01 1 2005  5  98    
2 1 2005-05-02 0 2005  5  62    
3 1 2005-05-05 0 2005  5  78       
4 2 2005-05-01 1 2005  5  64 
5 2 2005-05-06 0 2005  5  75    
6 2 2005-05-04 0 2005  5  98 
7 2 2005-05-02 0 2005  5  62 
8 3 2005-05-03 1 2005  5  88  

私はコードを、私はこのコード、日付の変更を実行して、私のデータはNA

に置き換えられ
date X id case year month temp  RH 
1 12904 NA NA NA NA NA  NA  71.1 
2 12905 NA NA NA NA NA  NA  47.0 
3 12906 NA NA NA NA NA  NA  58.6 
4 12907 NA NA NA NA NA  NA  44.2 

Iしかし

merge(CC, RH.data, by="date", all=T) 

を使用して日付してそれらをマージしようとしています同じものを維持するためにはCCの順序が必要であり、日付が同じ場所に入力するRHの値については単純に必要です。どのようなコードでこれを行うことができますか?

+0

ようこそStackOverflow。この記事を[Rの素晴らしい例を作る](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)で見てください。例を提供するために 'dput'を使用すると便利です。 'dput(head(RH))'と 'dput(head(cc))'の結果をコピーします。 'merge'関数にはタイプミスがあることにも注意してください。直前のコードに従って 'merge(cc、RH、by =" date "、all = T)します。 – lmo

答えて

0

cc data.frameに対応するRH値を追加すると仮定した場合、次のようにします。

cc$RH <- NA 
for(i in 1:nrow(RH.data)) cc$RH[cc$date==RH.data$date[i]] <- RH.data$RH[i] 
0

tidyverseパッケージを使用して、このソリューションをお試しください:

library(tidyverse) 

date = c("2005-05-01", "2005-05-02", "2005-05-03", "2005-05-04", "2005-05-05", "2005-05-06") 
RH = c(71.1, 47.0, 58.6, 44.2, 41.8, 61.3) 

RH <- data_frame(date, RH) 

X <- 1:8 
id <- c(1, 1, 1, 2, 2, 2, 2, 3) 
date <- c("2005-05-01", "2005-05-02", "2005-05-05", "2005-05-01", "2005-05-06", "2005-05-04", "2005-05-02", "2005-05-03") 
case <- c(1, 0, 0, 1, 0, 0, 0, 1) 
year <- 2005 
month <- 5 
temp <- c(98, 62, 78, 64, 75, 98, 62, 88) 

cc <- data_frame(X, id, date, case, year, month, temp) 

joined <- right_join(RH, cc, by = "date") 

またhttp://tidyr.tidyverse.orgを参照してください、あなたのデータセットを "片付け" を検討してください。

関連する問題