2017-03-27 4 views
-1

私はこの問題を解決する方法についてあなたの意見が必要です株式とRはあなたの意見を必要とします

私は大きなデータセットから小さなデータサブセットを持っています。

私のサブセットと私の元のデータセットは、このフォーマットに従ってください:

here is a picture of how it looks

は、ここではそれが書き出される:

Stock Date Price 
Pfizer 18-Aug-2009 18.8 
Yahoo 19-Aug-2012 27.1 
Facebook 20-Aug-2014 77.14 
Amazon 21-Aug-2014 683.66 
Merck 22-Aug-2005 22.9 
Ford 23-Aug-2003 20.1 

をさんは、私のサブセットを言ってみましょう、私は特に選択されたセットです。

私はこのサブセットをとり、それを名前にしたい(MoneyFA)。 MoneyFAの価格をT0に設定したいと思います。前年の最高価格がT-1で、その前の年がt-2であるとしましょう。そして、1年後の価格はT1、そして1年後の価格はT2です。

ここで、変数の日付を持つサブセットを取得し、T値のメインデータセット(これは大量のデータがあり、それをMoneypoolと名づけましょう)に対して検索を開始する方法をプログラムします。私たちの窓口はT0の10年前と10年後です。 (特定の会社の主なデータセットには、ある年に複数の価格が設定されている可能性があります)

私には、この(メインデータセットには値がない場合は、空またはNA保持することができる):ここでは

Here is a picture of how it looks

それが書き出されます。

Stock T-10 T-9 T-8 T-7 T-6 T-5 T-4 T-3 T-2 T-1 T0 T+1 T+2 T+3 T+4 T+5 T+6 T+7 T+8 T+9 T+10 
Pfizer 37.12 24.9  19.23  27.01 21.05 17.12 19.88 17.9 18.8 20.91 23.4  24.9       
Yahoo   9.8 18.9 19.7  12.5 22.6 15.8  27.1           
Facebook        35.86 49.62 63.38 77.14 90.9          
Amazon    208.9 533.42 558.46 600.2 608.54 700.1 658.62 683.66 708.7 733.74 809.11       
Merck 41.1 39.28 37.46 35.64 33.82 32 30.18 28.36 26.54 38.7 22.9 21.08 29.8         
Ford 66.1 61.5 56.9 52.3 47.7 43.1 38.5 33.9 29.3 24.7 20.1 15.5 10.9 6.3 1.7 4.2 7.3 8.9 10.5 12.1 11.8 
+0

あなたは([再現例]を提供することができhttp://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)? – jsb

答えて

0

はここdata.tableを使った例です。 DateからYearを抽出し、最大PriceStockおよびYear)は、year_zeroから10年以内にYearsで計算されます。年は、その後、(Tで)year_zeroに対して発現され、結果は、ワイドフォーマットでcastありさ:

library(data.table) 
d <- structure(list(Stock = c("Pfizer", "Yahoo", "Facebook", "Amazon", 
"Merck", "Ford"), Date = c("18-Aug-2009", "19-Aug-2012", "20-Aug-2014", 
"21-Aug-2014", "22-Aug-2005", "23-Aug-2003"), Price = c(18.8, 
27.1, 77.14, 683.66, 22.9, 20.1)), .Names = c("Stock", "Date", 
"Price"), row.names = c(NA, -6L), class = "data.frame") 

setDT(d) 
year_zero <- 2010 
# Extract Year from Date 
d[, Year := as.integer(substr(Date, start = 8, 12))] 
# Filter to include year_zero +/- 10 years and get max price per stock per year 
d <- d[Year >= year_zero - 10 & Year <= year_zero + 10, 
    .(Max_Price = max(Price, na.rm = TRUE)), by = .(Stock, Year)] 
# Add T as interval to year_zero (and convert to factor in order to get all 
# values from -10 to 10 
d[, "T" := factor(Year - year_zero, levels = seq(-10, 10), ordered = TRUE)] 
# Cast to wide format (fill missing values with NA) 
dcast(d, Stock~T, value.var = "Max_Price", drop = FALSE) 
# Cast to wide format (fill missing values with "") 
dcast(d, Stock~T, value.var = "Max_Price", drop = FALSE, fun.aggregate = paste0, 
    fill = "") 

dcastの出力である:

 Stock -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3  4 5 6 7 8 9 10 
1: Amazon NA NA NA NA NA NA NA NA NA NA NA NA NA NA 683.66 NA NA NA NA NA NA 
2: Facebook NA NA NA NA NA NA NA NA NA NA NA NA NA NA 77.14 NA NA NA NA NA NA 
3:  Ford NA NA NA 20.1 NA NA NA NA NA NA NA NA NA NA  NA NA NA NA NA NA NA 
4: Merck NA NA NA NA NA 22.9 NA NA NA NA NA NA NA NA  NA NA NA NA NA NA NA 
5: Pfizer NA NA NA NA NA NA NA NA NA 18.8 NA NA NA NA  NA NA NA NA NA NA NA 
6: Yahoo NA NA NA NA NA NA NA NA NA NA NA NA 27.1 NA  NA NA NA NA NA NA NA 
+0

これはとてもいいようです。唯一のことは、T0は私によって割り当てられるべきです。したがって、最初の画像には実際にT0値が含まれています。だから1年と結びついていない。 Kristofferようこそありがとうございます。 – Nemo

+0

あなたは大歓迎です! year_zero変数を使用してT0の年を指定することができます。 T0のデータを必要としない場合は、フィルタリングをd [年> = year_zero - 10&Year <= year_zero + 10&year!= year_zero、....]に変更できます。その後、あなた自身にT0にデータを割り当てることができます。 –

+0

あなたは華麗です!私はそれがどのように進むのかを知らせます。 – Nemo

関連する問題