Search code examples
rtransformationxtsquantmod

Turning a List of Transactions into Hourly/Daily Prices in R


I've downloaded a list of every Bitcoin transaction on a large exchange since 2013. What I have now looks like this:

                  Time Price    Volume
1  2013-03-31 22:07:49  93.3 80.628518
2  2013-03-31 22:08:13 100.0 20.000000
3  2013-03-31 22:08:14 100.0  1.000000
4  2013-03-31 22:08:16 100.0  5.900000
5  2013-03-31 22:08:19 100.0 29.833879
6  2013-03-31 22:08:21 100.0 20.000000
7  2013-03-31 22:08:25 100.0 10.000000
8  2013-03-31 22:08:29 100.0  1.000000 
9  2013-03-31 22:08:31 100.0  5.566121
10 2013-03-31 22:09:27  93.3 33.676862

I'm trying to work with the data in R, but my computer isn't powerful enough to handle processing it when I run getSymbols(BTC_XTS). I'm trying to convert it to a format like the following (price action over a day):

   Date       Open  High  Low   Close  Volume       Adj.Close
1  2014-04-11 32.64 33.48 32.15 32.87 28040700     32.87
2  2014-04-10 34.88 34.98 33.09 33.40 33970700     33.40
3  2014-04-09 34.19 35.00 33.95 34.87 21597500     34.87
4  2014-04-08 33.10 34.43 33.02 33.83 35440300     33.83
5  2014-04-07 34.11 34.37 32.53 33.07 47770200     33.07
6  2014-04-04 36.01 36.05 33.83 34.26 41049900     34.26
7  2014-04-03 36.66 36.79 35.51 35.76 16792000     35.76
8  2014-04-02 36.68 36.86 36.56 36.64 14522800     36.64
9  2014-04-01 36.16 36.86 36.15 36.49 15734000     36.49
10 2014-03-31 36.46 36.58 35.73 35.90 15153200     35.90

I'm new to R, and any response would be greatly appreciated!


Solution

  • I don't know what you could mean when you say your "computer isn't powerful enough to handle processing it when [you] run getSymbols(BTC_XTS)". getSymbols retrieves data... why do you need to retrieve data you already have?

    Also, you have no adjusted close data, so it's not possible to have an Adj.Close column in the output.

    You can get what you want by coercing your input data to xts and calling to.daily on it. For example:

    require(xts)
    Data <- structure(list(Time = c("2013-03-31 22:07:49", "2013-03-31 22:08:13", 
    "2013-03-31 22:08:14", "2013-03-31 22:08:16", "2013-03-31 22:08:19", 
    "2013-03-31 22:08:21", "2013-03-31 22:08:25", "2013-03-31 22:08:29", 
    "2013-03-31 22:08:31", "2013-03-31 22:09:27"), Price = c(93.3, 
    100, 100, 100, 100, 100, 100, 100, 100, 93.3), Volume = c(80.628518, 
    20, 1, 5.9, 29.833879, 20, 10, 1, 5.566121, 33.676862)), .Names = c("Time", 
    "Price", "Volume"), class = "data.frame", row.names = c(NA, -10L))
    x <- xts(Data[,-1], as.POSIXct(Data[,1]))
    d <- to.daily(x, name="BTC")