从`dplyr`将函数内发生变异`()`(Applying a function within `m

2019-10-29 06:18发布

我想在中应用自定义功能dplyr包。

数据和功能

library(tidyquant)
library(dplyr)

Ra <- c("AMZN","FB","GOOG", "NFLX") %>%
  tq_get(get = "stock.prices",
         from = "2013-01-01",
         to = "2016-12-31")


Rb <- "SPY" %>%
  tq_get(get = "stock.prices",
         from = "2013-01-01",
         to = "2016-12-31")

stock_returns_daily <- Ra
benchmark_returns_daily <- Rb  

RaRb <- left_join(stock_returns_daily, benchmark_returns_daily, by = c("date" = "date"))
normalise_series <- function(xdat) xdat / coredata(xdat)[1]

(注:这是关于一前一后我做了一个跟进的问题这里不直接涉及到这个问题)。

我试图应用normalise_series <- function(xdat) xdat / coredata(xdat)[1]在上面的代码到的一部分dplyr片。 我至今是;

x <- RaRb %>% 
  group_by(symbol) %>%
  select(symbol, adjusted.x) %>%
  rowwise() %>% 
  mutate(adj.x = normalise_series(adjusted.x))

而且我不完全知道为什么,这是行不通的。 我知道我失去了一些东西,但不知道是什么/为什么。 我创建的列,只需创建一个矢量一个1`s

我试图函数(股票价格正常化功能)适用于每个组中的dataframe ,而不是整个列。 (然而,正如指出的@Noah我所有的股票将标准化功能。

在正确的方向的任何指针将是巨大的!

Answer 1:

rowwise()动词使得它如此每个命令是在每行上分别进行。 这是不是你想要的,因为你要在规范化组中所有的值。 不是一行。 只要采取的那部分。

x <- RaRb %>% 
  group_by(symbol) %>%
  select(symbol, adjusted.x) %>%
  mutate(adj.x = normalise_series(adjusted.x))


文章来源: Applying a function within `mutate()` from `dplyr`
标签: r dplyr