【问题标题】:Applying function and spreading data in dplyr mutate/summarise在 dplyr mutate/summarise 中应用函数和传播数据
【发布时间】:2019-08-08 10:29:54
【问题描述】:

我正在尝试计算一些函数,然后根据结果传播我的数据。

代码和数据:

-- 预处理:

library(tidyquant)
library(tsfeatures)

data(FANG)

FANG_returns <- FANG %>%
  group_by(symbol) %>%
  tq_transmute(select     = adjusted, 
               mutate_fun = periodReturn, 
               period     = "daily", 
               type       = "arithmetic")

FANG_returns

有效的代码:

FANG_returns %>%
  filter(symbol == "FB") %>%
  mutate(ent = entropy(daily.returns))

不起作用的代码:

FANG_returns %>%
  filter(symbol == "FB") %>%
  mutate(max = max_level_shift(daily.returns))

错误:

错误:列 max 的长度必须为 1008(组大小)或 1,而不是 2

函数max_level_shift返回两列:

max_level_shift(AirPassengers)
#>  max_level_shift time_level_shift 
#>             54.5            117.0

我怎样才能spread我的数据,以便我通过以下方式获得我的数据:

> FANG_returns %>%
+   filter(symbol == "FB") %>%
+   summarise(ent = entropy(daily.returns))
# A tibble: 1 x 2
  symbol   ent   max_level_shift time_level_shift
  <chr>  <dbl>         <dbl>           <dbl>
1 FB     0.991       0.0573yyy       0.92764zzzz 

任何指针都会很棒。

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    我们可以不使用spread,而是按位置对max_level_shift(daily.returns) 进行子集化,因为我们知道max 将在第一个位置,time 在第二个位置.

    library(tidyquant)
    library(tsfeatures)
    FANG_returns %>%
    filter(symbol == "FB") %>%
    summarise(ent = entropy(daily.returns) ,
              max_level_shift = max_level_shift(daily.returns)[1], 
              time_level_shift = max_level_shift(daily.returns)[2])
    
    # A tibble: 1 x 4
       symbol   ent max_level_shift time_level_shift
       <chr>  <dbl>           <dbl>            <dbl>
     1 FB     0.991          0.0484              141
    
    #2nd option 
    FANG_returns %>%
    filter(symbol == "FB") %>%
    summarise(ent = entropy(daily.returns) , 
              max = paste(max_level_shift(daily.returns), collapse = '-')) %>% 
    separate(max, into=c('max_level_shift','time_level_shift'), sep = '-', convert = TRUE)
    

    【讨论】:

      猜你喜欢
      • 2016-08-07
      • 1970-01-01
      • 2016-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-30
      • 1970-01-01
      相关资源
      最近更新 更多