Поиск еженедельных доходов от ежедневных доходов по компании - PullRequest
3 голосов
/ 09 апреля 2019

У меня есть данные, которые выглядят примерно так

co_code company_name co_stkdate dailylogreturn
1        A           01-01-2000  0.76
1        A           02-01-2000  0.75
.
.
.
1        A           31-12-2019  0.54
2        B           01-01-2000  0.98
2        B           02-01-2000  0.45

. , И так далее

Я хочу найти еженедельный доход , который равен сумме дневного дохода за одну неделю.

вывод должен выглядеть примерно так

 co_code company_name co_stkdate weeklyreturns
    1        A           07-01-2000  1.34
    1        A           14-01-2000  0.95
    .
    .
    .
    1        A           31-12-2019  0.54
    2        B           07-01-2000  0.98
    2        B           14-01-2000  0.45

Я пытался применить функции в пакете quantmod, но эти функции применимы только к объектам xts. Другая проблема в объектах xts заключается в том, что функция group_by () не может использоваться. Таким образом, я хочу работать только в обычном датафрейме.

Код выглядит примерно так

library(dplyr)
### Reading txt file
df <- read.csv("33339_1_120_20190405_165913_dat.csv")

Расчет дневного дохода

df <- mutate(df, "dailylogrtn"=log(nse_returns)) %>% as.data.frame()

форматирование даты

df$co_stkdate<- as.Date(as.character(df$co_stkdate), format="%d-%m-%Y")

Ответы [ 2 ]

1 голос
/ 09 апреля 2019

Поскольку мы не знаем, сколько дней в неделю вы получили dailylogreturn, возможно, есть NA, я рекомендую группировать по неделям и годам:

#sample data
df <-   data.frame(co_stkdate = rep(seq.Date(from = as.Date("2000-01-07"), to = as.Date("2000-02-07"), by = 1), 2),
                   dailylogreturn = abs(round(rnorm(64, 1, 1), 2)),
                   company_name = rep(c("A", "B"), each = 32))


df %>%
  mutate(co_stkdate = as.POSIXct(co_stkdate),
         year = strftime(co_stkdate, "%W"),
         week = strftime(co_stkdate, "%Y")) %>%
  group_by(company_name, year, week) %>%
  summarise(weeklyreturns = sum(dailylogreturn, na.rm = TRUE))

# A tibble: 12 x 4
# Groups:   company_name, year [12]
   company_name year  week  weeklyreturns
   <fct>        <chr> <chr>         <dbl>
 1 A            01    2000           6.31
 2 A            02    2000           6.11
 3 A            03    2000           6.02
 4 A            04    2000           8.27
 5 A            05    2000           4.92
 6 A            06    2000           0.5 
 7 B            01    2000           1.82
 8 B            02    2000           6.6 
 9 B            03    2000           7.55
10 B            04    2000           7.63
11 B            05    2000           7.54
12 B            06    2000           1.03


1 голос
/ 09 апреля 2019

Поскольку у меня нет примеров данных, я предполагаю, что это должно работать:

df %>%
   group_by(group = ceiling((1:nrow(df)/ 7))) %>%
   summarise(mean = mean(weeklyreturns))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...