在`dplyr`的`mutate()`中应用一个函数

时间:2018-07-13 20:32:22

标签: r dplyr

我正在尝试在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]

(注意:这是有关我之前发表的here帖子的跟进问题,与该问题没有直接关系。)

我正在尝试将以上代码的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的向量

我正在尝试将该功能(股票价格的归一化功能)应用于dataframe中的每个组,而不是整个列。 (而正如@Noah所指出的那样,我正在对所有股票应用归一化功能。

任何指向正确方向的指针都很棒!

1 个答案:

答案 0 :(得分:1)

使用rowwise()动词可以使每个命令分别在每一行上执行。这不是您想要的,因为您希望对组中的所有值进行标准化。没有一行。只需把那部分拿出来。

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