преобразовать один формат данных в другой с созданной дополнительной переменной в R - PullRequest
1 голос
/ 28 сентября 2019

Скажем, у меня есть такой набор данных.

mydat=structure(list(Date = structure(c(3L, 2L, 1L), .Label = c("2019-09-23 07-AM", 
"2019-09-23 08-AM", "2019-09-23 09-AM"), class = "factor"), Symbol = structure(c(1L, 
1L, 1L), .Label = "BTCUSD", class = "factor"), Open = c(8065.1, 
8127.07, 8082.32), High = c(8085.04, 8137.61, 8135.93), Low = c(8065.09, 
8058.95, 8022.19), Close = c(8085.04, 8065.1, 8127.07), Volume = c(14.286264, 
22.74164, 42.751659)), .Names = c("Date", "Symbol", "Open", "High", 
"Low", "Close", "Volume"), class = "data.frame", row.names = c(NA, 
-3L))

Дата Var должна быть меткой времени, т.е. преобразованные данные

Timestamp,Open,High,Low,Close,Volume_(BTC),Volume_(Currency),Weighted_Price
1325317920,4.39,4.39,4.39,4.39,0.45558087,2.0000000193,4.39
1325317980,NaN,NaN,NaN,NaN,NaN,NaN,NaN
1325318040,NaN,NaN,NaN,NaN,NaN,NaN,NaN
1325318100,NaN,NaN,NaN,NaN,NaN,NaN,NaN
1325318160,NaN,NaN,NaN,NaN,NaN,NaN,NaN
1325318220,NaN,NaN,NaN,NaN,NaN,NaN,NaN

здесь должна быть дополнительная переменная - Weighted_Price для ее вычисленияя должен использовать простую формулу [(Hgh + Low + Close) / 3] вручную

Как получить желаемый формат в R?

Ответы [ 2 ]

3 голосов
/ 28 сентября 2019

Если я последую вашему описанию, вы хотите преобразовать Date в метку времени и вычислить среднее из 3 значений.Используя базу R, это будет

transform(mydat, timestamp = as.integer(as.POSIXct(Date, format = "%Y-%m-%d %I-%p", 
          tz = "UTC")), weighted_avg = (High + Low + Close)/3)

Используя dplyr и lubridate, мы можем сделать

library(dplyr)
library(lubridate)

mydat %>%
  mutate(timestamp = as.integer(ymd_h(Date)), 
         weighted_avg = (High + Low + Close) / 3)
1 голос
/ 28 сентября 2019

Мы можем использовать anytime от anytime

library(anytime)
library(dplyr)
mydat %>%
   mutate(timestamp - as.integer(anytime(Date)),
              weighted_avg = rowMeans(.[c('High', "Low", "Close")]))

Или с base R

transform(mydat, timestamp = as.integer(strptime(Date, format = "%Y-%m-%d  %I-%p", tz = "UTC")), weighted_avg = rowMeans(mydat[c("High", "Low", "Close")]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...