2016-08-03 10 views
2

次のデータセットがあります。私は、データセットを複雑いる欠損値を補間する補間を伴うdatetimeシリーズデータ

name - old - new - datetime 
1051  ?   ?   2016-01-24 03:20:00 
1051  ?   ?   2016-01-24 03:30:00  
1051  ?   ?   2016-01-24 03:40:00 
1051  ?   ?   2016-01-24 03:50:00 
1051  ?   ?   2016-01-24 04:00:00 
1051  ?   ?   2016-01-25 04:10:00 
..  ..   ..   .. 

name - old - new - datetime  
1051  38656  38400  2016-01-24 03:22:37  
1051  5888  5632  2016-01-24 04:03:28 
1051  5632  38144  2016-01-24 04:34:22  
1051  5120  4864  2016-01-24 03:56:33 
1051  37376  37632  2016-01-25 08:08:16 
..  ..   ..   .. 

私は、このデータセットを補間します。だから、もっときれいなデータセットを得るために補間したい。私はこれを試しています

data.frame(datetime = seq(roomsdatetime$datetime[1], roomsdatetime$datetime[nrow(roomsdatetime)], by = "10 min")) %>% 
    mutate(roomsdatetime, approx = na.approx(roomsdatetime$old_value)) 

私はこのエラーを取得する:

Error: wrong result size(3562), expected 3565 or 1

は別の方法はありますか? Excelで

+0

は、あなたが求めているものを明確ではありません。データを10分間隔に変換しますか?それが事実ならここの例を見てください。http://stackoverflow.com/a/10423613/2824732 – Robert

+0

線形補間には注意してください!線形補間法を使用して等間隔の観測値にデータを変換することは、多数の重要かつ困難なバイアスを定量化することを導入することができる。参照:M. ScholesとJ. Williams、「非同期データからのベータの推定」、Journal of Financial Economics 5:309-327、1977。 http://www.sciencedirect.com/science/article/pii/0304405X77900411あなたの目標もちろん等間隔のデータを取得することではありませんが、とにかく補間を使用しようとします。 –

+0

補間のタイプも、線形、二次、立方などの質問にはありません。 smooth.spline'を介して3次補間を分析するためのコンソールで使用します。 –

答えて

0

、leftestトップに次のように入力します。

[(順序付けられた)日付時刻とベース値0に割り当てられている2016年1月24日午前三時20分00秒との間の秒単位の「差異」( )カラムを、次いで式 "=(B3- $ B $ 2)* 86400"]

name   datetime difference old  new 
1051 24.01.2016 03:20:00 0  NA  NA 
1051 24.01.2016 03:22:37 157 38656 38400 
1051 24.01.2016 03:30:00 600  NA  NA 
1051 24.01.2016 03:40:00 1200 NA  NA 
1051 24.01.2016 03:50:00 1800 NA  NA 
1051 24.01.2016 03:56:33 2193 5120 4864 
1051 24.01.2016 04:00:00 2400 NA  NA 
1051 24.01.2016 04:03:28 2608 5888 5632 
1051 24.01.2016 04:34:22 4462 5632 38144 
1051 25.01.2016 04:10:00 89400 NA NA 
1051 25.01.2016 08:08:16 103696 37376 37632 

を介してファイルを取得した - として保存 - [ファイル名:seymaalaca.csv。タイプ: "CSV(カンマ区切り)(* .csv)に"]

mydataframe <- read.csv("C:/Users/User/Documents/Revolution/seymaalaca.csv", header=TRUE, sep=",", stringsAsFactors = FALSE) 
mydataframe # results in: 



    name   datetime difference old new  
1 1051 24.01.2016 03:20:00   0 NA NA  
2 1051 24.01.2016 03:22:37  157 38656 38400  
3 1051 24.01.2016 03:30:00  600 NA NA  
4 1051 24.01.2016 03:40:00  1200 NA NA  
5 1051 24.01.2016 03:50:00  1800 NA NA  
6 1051 24.01.2016 03:56:33  2193 5120 4864  
7 1051 24.01.2016 04:00:00  2400 NA NA  
8 1051 24.01.2016 04:03:28  2608 5888 5632  
9 1051 24.01.2016 04:34:22  4462 5632 38144  
10 1051 25.01.2016 04:10:00  89400 NA NA  
11 1051 25.01.2016 08:08:16  103696 37376 37632 

oldcolumn <- lm(mydataframe$old ~ mydataframe$difference) 
oldcolumn # old = 1.348e+04 + 2.233e-01*difference 
oldfunction <- function (difference) {1.348e+04 + 2.233e-01*difference} # produces the row values for the "old" column 

newcolumn <- lm(mydataframe$new ~ mydataframe$difference) 
newcolumn # new = 2.14e+04 + 1.56e-01*difference 
newfunction <- function (difference) {2.14e+04 + 1.56e-01*difference} # produces the row values for the "new" column 

myinterpolizer <- function (difference) {c(oldfunction(difference),newfunction(difference))} # produces the row values for the "old&new" column 

myinterpolizer(0) # 13480 21400 
myinterpolizer(600) # 13613.98 21493.60 
myinterpolizer(1200) # 13747.96 21587.20 
myinterpolizer(1800) # 13881.94 21680.80 
myinterpolizer(2400) # 14015.92 21774.40 
myinterpolizer(89400) # 33443.02 35346.40 

上記の12個の数字を生成少しシンプルなワンライナー:

# mydataframe[is.na(mydataframe$old),] # filters the rows where old=NA 
# mydataframe[is.na(mydataframe$old),3] # After (filtering the rows where old=NA) select (the "difference" column) 
lapply(mydataframe[is.na(mydataframe$old),3], myinterpolizer) 
+0

Seyma Alacaは解決策を受け入れるべきです。彼女は「同意する」または「この回答は役に立ちます」ボタンを使用することを知らないようです。 –