2017-01-01 6 views
1

ここに簡単な質問があり、簡単な答えがあることを願っています。データからの補間

これは私のgraph

日付(必ずしも既存のデータポイントではありません日付)の外側のリストを取り、それらに対応するFUEL_PRICE値を取得するためにとにかくありますか?

ありがとうございました。 EDIT

:ように

data1 
     [date] [fuel price] 
[1,] 01/15/2010  3.56   
[2,] 01/17/2010  3.32   
[3,] 03/18/2010  3.45   
[4,] 04/20/2010  3.94   
[4,] 04/25/2010  3.94  

と...

は、燃料価格が2010年2月15日のためになるものを依頼することが可能です:ここに は私のデータの一例です既存のデータが与えられているか?

+0

のようなものをお勧めします私はあなたがデータ外の値を推定したいため、補間ではなく、外挿意味だと思います範囲。そうするためには、回帰モデルを構築し、それを使って外挿する必要があります。おそらくRで 'lm'関数を使うのがこれを行う最も簡単な方法です。 –

+0

助けてくれてありがとうGaurav。しかし、私は2008年と2016年の日付のFUEL_PRICE値にしようとしていますが、必ずしも既に値を持っている日付ではありません。どんな助け? –

答えて

1

関数approxfunは、データから補間関数を作成しますが、数値データを入力として想定しています。私はあなたの日付が文字列として利用可能であると仮定しているので、最初にas.POSIXctを使って文字列から日付に変換し、日付からas.numericを使って数値に変換する必要があります。

# Sample data 
Data = read.table(text= "date fuel_price 
01/15/2010  3.56   
01/17/2010  3.32   
03/18/2010  3.45   
04/20/2010  3.94   
04/25/2010  3.94", 
header=TRUE, stringsAsFactors=FALSE) 

## Convert date strings to numbers 
DateNum = as.numeric(as.POSIXct(Data$date, format="%m/%d/%Y")) 

## fit a function to the data 
PriceFun = approxfun(Data$fuel_price ~ DateNum) 

## Set up a function that will do the same pre-processing on new input. 
PriceFromDate = function(x) { 
    round(PriceFun(as.numeric(as.POSIXct(x, format="%m/%d/%Y"))), 2) } 

## Test with your example 
PriceFromDate("02/15/2010 ") 
[1] 3.38 

## Everything is vectorized so you can give it a list of dates 
PriceFromDate(c("02/15/2010 ", "02/20/2010")) 
[1] 3.38 3.39 

、csvファイルを読む価格を推定し、その結果を書き出すために、あなたは

FuelData = read.csv("YourFile.csv", stringsAsFactors=FALSE) 
FuelData$EstPrice = PriceFromDate(FuelData$date) 
write.csv(FuelData, "NewFuelFile.csv") 
+0

ありがとうございました!しかし、簡単な質問ですが、とにかく 'PriceFromDate'で日付のリストを実行し、結果をcsvにエクスポートするのですか? –

+0

はい、答えに追加する – G5W

+0

あなたは素晴らしいです! –