R-在Groupby中分配地板日期失败



这是我的代码,我对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告诉我要做的事情,但是我知道在另一个功能上遇到相同的错误,该怎么办?

这个想法是,我们不需要summarise_at分组的变量,而是使用Date来考虑这一点。可以跳过selectmutate调用。他们是为了方便的。

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() 

最新更新