#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. Большое спасибо! Это работает, однако теперь я получаю ту же ошибку с другой функцией (см. Обновление)