【发布时间】:2018-02-24 01:12:36
【问题描述】:
编辑:
我想通了!
df_CloseDelta$YearMonth <- as.yearmon(df_CloseDelta$date)
df_CloseDelta %>%
group_by(stock, YearMonth) %>%
summarize(minCloseDelta = min(closeDelta),
meanCloseDelta = mean(closeDelta),
maxCloseDelta = max(closeDelta)) -> df_summary_CloseDelta
我创建了以下数据框,其中显示了日期、股票名称以及每只股票的收盘价与前一天相比的百分比差异。
library(quantmod)
library(dplyr)
library(tidyr)
library(ggplot2)
library(zoo)
start <- as.Date("2014-01-01")
end <- as.Date("2017-12-31")
getSymbols(c("AAPL", "AMZN", "FB", "GOOG", "MSFT"),
from = start, to = end, return.class = "data.frame")
df_wide <- bind_cols(AAPL, AMZN, FB, GOOG, MSFT) %>%
mutate(date = as.Date(rownames(AAPL)))
df_long <- df_wide %>%
gather(key = stock, value = value, - date) %>%
separate(stock, into = c("stock", "type"))
df_panel <- df_long %>%
spread(key = type, value = value)
df_CloseDelta <- df_panel %>%
group_by(stock) %>%
mutate(closeDelta = 100 * (Close - lag(Close))/lag(Close)) %>%
select(date, stock, closeDelta) %>%
filter(!is.na(closeDelta))
我正在尝试按年份和月份对这些条目进行分组(2014 年 1 月 AAPL 收盘价的所有百分比变化,2014 年 1 月 AMZN 收盘价的所有百分比变化等)我正在尝试使用 yearmon() 函数来执行此操作,并认为我可以创建(变异)一个新列,我可以在其中提取年份和月份,然后对数据进行分组,或者只对它进行分组而不创建新列。我能够做到这一点:
as.yearmon(df_CloseDelta$date)
然后返回:
[1] "Jan 2014" "Jan 2014" "Jan 2014" "Jan 2014" "Jan 2014" "Jan 2014" "Jan 2014"
[8] "Jan 2014" "Jan 2014" "Jan 2014" "Jan 2014" "Jan 2014" "Jan 2014" "Jan 2014"
[15] "Jan 2014" "Jan 2014" "Jan 2014" "Jan 2014" "Jan 2014" "Jan 2014" "Jan 2014"
[22] "Jan 2014" "Jan 2014" "Jan 2014" "Jan 2014" "Jan 2014" "Jan 2014" "Jan 2014"
每个条目以此类推。
然后我尝试将其分组:
df_summary_CloseDelta <- df_CloseDelta %>%
group_by(as.yearmon(df_CloseDelta$date))
但收到此错误:
Error in mutate_impl(.data, dots) :
Column `as.yearmon(df_CloseDelta$date)` must be length 1006 (the group
size) or one, not 5030
我知道有 1,006 个日期,但鉴于有 5 个股票,因此有 5,030 个条目。我正在尝试对它们进行分组,然后找出每个股票每月和每年的平均值、最小值和最大值。有人可以指出我正确的方向吗?
【问题讨论】: