Сбой при назначении даты этажа в groupby

#r #dplyr

#r #dplyr

Вопрос:

это мой код, и у меня проблема с groupby :

     library(dplyr)
    library(lubridate)

    df <- read.xlsx("Data.xlsx", sheet = "Sector-STOXX600", startRow = 2,colNames = TRUE, detectDates = TRUE, skipEmptyRows = FALSE)
    df[2:19] <- data.matrix(df[2:19])


 percent_change2 <- function(x)last(x)/first(x) - 1

    monthly_return <- df %>% 
      group_by(gr = floor_date(Date, unit = "month")) %>%
      summarize_at(vars(-Date, -gr), percent_change2) %>%
      ungroup() %>%
      select(-gr) %>% 
      as.matrix()  
  

Действительно, у меня эта ошибка :

«Ошибка в is_character(x): объект ‘gr’ не найден»

Вот пример набора данных :

     Date  .SXQR  .SXTR  .SXNR  .SXMR  .SXAR  .SX3R  .SX6R  .SXFR  .SXOR  .SXDR  .SX4R  .SXRR  .SXER
1 2000-01-03 364.94 223.93 489.04 586.38 306.56 246.81 385.36 403.82 283.78 455.39 427.43 498.08 457.57
2 2000-01-04 345.04 218.90 474.05 566.15 301.13 239.24 374.64 390.41 275.93 434.92 414.10 476.17 435.72
  

Обновить

 volatility_function<- function(x)sqrt(252) * sd(diff(log(x))) * 100
annualized_volatility <- df %>%
  mutate(Date=ymd(Date)) %>%
  group_by(gr = floor_date(Date, unit = "year")) %>%
  select(gr,everything()) %>%
  summarize_at(vars(-Date, -gr), volatility_function) %>%
  ungroup() %>% select(-gr) %>%
  as.matrix() 
head(annualized_volatility,5)
  

Я попробовал то, что @NeslonGon сказал мне сделать, однако я знаю, что получаю ту же ошибку в другой функции, что мне делать?

Комментарии:

1. Избегайте использования $ при использовании dplyr и канала.

2. Вы могли бы использовать mutate() вместо group_by() для создания новой переменной «gr». Затем вы могли бы передать это в group_by(). Итак, это будет: monthly_return <- df %>% mutate(gr = floordate(Дата, единица измерения = «месяц»)) %>% group_by(gr) …

3. @NelsonGon Я пытался, но выдает ту же ошибку..

4. Ну, для меня это возвращает другую ошибку: Error in [[.default (object, name, exact = TRUE) : subscript out of bounds Не могли бы вы добавить dput свои данные?

5. @NelsonGon Вот файл , это фрейм данных df

Ответ №1:

Идея в том, что нам не нужна summarise_at сгруппированная переменная, но мы используем Date для учета этого. Вызовы select и mutate могут быть пропущены. Они для удобства.

 df %>%
  mutate(Date=ymd(Date)) %>% 
 group_by(gr = floor_date(Date, unit = "month")) %>% 
  select(gr,everything()) %>% 
  summarize_at(vars(-Date), percent_change2) %>%  
  ungroup() %>% 
  select(-gr) %>% 
  as.matrix() 
  

Комментарии:

1. Большое спасибо! Это работает, однако теперь я получаю ту же ошибку с другой функцией (см. Обновление)