2016-06-14 7 views
1

3つの異なるストリームの10の異なるサイトからの毎日の温度データがあります。一部のサイトにはNAの記入が必要なサイトがあります 各サイトには以下のコードを適用して、すべてのサイトに日付が欠落しないようにするにはどうすればよいですか。いくつかのサイトには同じ日付がありません。同じ列内の異なるグループに機能を適用する

sorted_data = SiteA[order(SiteA$Date),] 
data_length = length(sorted_data$Date) 
time_min = sorted_data$Date[1] 
time_max = sorted_data$Date[data_length] 
all_dates = seq(time_min, time_max, by="day") 
all_dates_frame = data.frame(list(Date=all_dates)) 
SiteA= merge(all_dates_frame, sorted_data, all=T) 
+1

ようこそStackOverflow。 [最小限の完全で検証可能な例を提供する]と同様に、[よくある質問をする方法](http://stackoverflow.com/help/how-to-ask)のこの記事を読む時間を取ってください。 (http://stackoverflow.com/help/mcve)それに応じてあなたの質問を改訂してください。 – lmo

+0

'?tapply'と'?aggregate'を見てください。 – lmo

+0

私はそれが行く方法だと思うが、私は詳細に固執しています。私は集合体とそれに似た他の関数を読んでいます。私はどのようにRにあなたのデータの構造を示す – shum

答えて

1

あなたは(あなたが何かを知っている限り、私はこの特定のケースについてはない)関数にそのコードをラップし、それを適用しますが、コードと他の問題があると、それはまた、統計的に有効な転嫁の方法論ではありませんでした。 - しかし、広く使用されており、統計学的に許容できる - 帰属方法

require(data.table) # to avoid trouble using rbind on dates and for speed 
require(RRF) 

# Simulate the data in question 
siteA <- data.table(Stream = c(1,1,1), Date = c(Sys.Date(), Sys.Date()+1, NA), site = 1) 
siteB <- data.table(Stream = c(2,2,2), Date = c(Sys.Date()-1, Sys.Date()+1, NA), site = 2) 
siteC <- data.table(Stream = c(3,3,3), Date = c(Sys.Date()-2, NA, Sys.Date()), site = 3) 
siteD <- data.table(Stream = c(1,1,1), Date = c(NA, Sys.Date()+1, NA), site = 4) 
siteE <- data.table(Stream = c(2,2,2), Date = c(Sys.Date(), NA, NA), site = 5) 
siteF <- data.table(Stream = c(3,3,3), Date = c(Sys.Date(), Sys.Date()+1, NA), site = 6) 
siteG <- data.table(Stream = c(1,1,1), Date = c(Sys.Date(), Sys.Date()-1, NA), site = 7) 
siteH <- data.table(Stream = c(1,1,1), Date = c(Sys.Date(), Sys.Date()-3, NA), site = 8) 
siteI <- data.table(Stream = c(1,1,1), Date = c(Sys.Date(), Sys.Date()+1, NA), site = 9) 
siteJ <- data.table(Stream = c(1,1,1), Date = c(Sys.Date(), Sys.Date()+1, NA), site = 10) 


# Combine data and impute date 
DT <- rbind(siteA,siteB,siteC,siteD,siteE,siteF,siteG,siteH,siteI,siteJ) 
DT <- DT[, Date:=as.factor(as.character(Date))] 

DT <- na.roughfix(DT) 
DT 

    Stream  Date site 
1:  1 2016-06-14 1 
2:  1 2016-06-15 1 
3:  1 2016-06-14 1 
4:  2 2016-06-13 2 
5:  2 2016-06-15 2 
6:  2 2016-06-14 2 
7:  3 2016-06-12 3 
8:  3 2016-06-14 3 
9:  3 2016-06-14 3 
10:  1 2016-06-14 4 
11:  1 2016-06-15 4 
12:  1 2016-06-14 4 
13:  2 2016-06-14 5 
14:  2 2016-06-14 5 
15:  2 2016-06-14 5 
16:  3 2016-06-14 6 
17:  3 2016-06-15 6 
18:  3 2016-06-14 6 
19:  1 2016-06-14 7 
20:  1 2016-06-13 7 
21:  1 2016-06-14 7 
22:  1 2016-06-14 8 
23:  1 2016-06-11 8 
24:  1 2016-06-14 8 
25:  1 2016-06-14 9 
26:  1 2016-06-15 9 
27:  1 2016-06-14 9 
28:  1 2016-06-14 10 
29:  1 2016-06-15 10 
30:  1 2016-06-14 10 
    Stream  Date site 

na.roughfixは名前がラフを暗示するように、次のとおりです。

は、これは私がお勧めするものです。あなたがもっと良いものを望むなら(少し長く設定して実行することを犠牲にして)、miceまたはそれ以上のものを試してくださいamelia

+0

助けてくれてありがとう、本当に感謝しています。私のデータはあなたのコードとは異なります。欠けている日付のためのNAが存在しないからです。日付はスキップするだけです(例:6/13/2016,6/15/2016)。理想的には、関数は各サイトの日付範囲を調べ、欠落した行を作成し、欠落した日付が存在する一時データ列にNAを挿入します。再度、感謝します。 – shum

関連する問題