Это шаги преобразования данных, чтобы вывести ваш набор данных в состояние, в котором вы можете легко рассчитать корреляции:
- Извлечение недели и года из столбца Дата, чтобы создать уникальный идентификатор недели по всему годы (
week()
и year()
являются lubridate
функциями). - Столбец "Дата удаления".
- Расширьте набор данных, чтобы значение для каждого запаса находилось в отдельном столбце (
pivot_wider()
- это функция tidyr
).
Код:
library(lubridate)
library(dplyr)
library(tidyr)
week_stocks <-
stocks %>%
mutate(Week = paste(year(Date), week(Date), sep = "_")) %>%
select(StockID, Value, Week) %>%
pivot_wider(names_from = StockID, values_from = Value)
После преобразования вы используете cor()
, чтобы получить корреляции всех акций. Поскольку вас интересуют только корреляции с одним указанным c запасом, вы можете использовать select()
, чтобы отбросить все остальные запасы и их корреляции.
cor(week_stocks[-1]) %>%
as_tibble(rownames = "stockIDs") %>%
select(stockIDs, `210449`)
Некоторые общие замечания:
- В коде вашего вопроса вы используете команду
attach()
, обычно не рекомендуется использовать ее для фреймов данных, поскольку это может привести к путанице и ошибкам; см. Этот пост . - Если вы хотите улучшить свои навыки R, проверьте tidyverse и его пакеты. Это большой набор пакетов, которые разделяют концепцию операций с данными, очень мощный и позволяет решать большинство проблем с данными с помощью небольшого набора лаконичных команд.
- При задании вопроса о StackOverflow Обычно хорошей практикой является включение ваших данных или хотя бы их части.
dput()
предоставляет код, необходимый для этого. Вставив вывод dput()
в ваш вопрос, другие пользователи могут воссоздать ваши данные в своей среде и выработать свой ответ, одновременно проверяя свой код на соответствие вашим данным. Например, вот так выглядит вывод dput()
моего фиктивного набора данных, который я использовал для создания кода в своем ответе.
Код:
dput(stocks)
Вывод:
structure(list(StockID = c(16139, 210449, 210449, 210449, 210449,
210449), Date = c("2015-09-11", "2015-09-11", "2015-09-18", "2015-09-25",
"2015-10-02", "2015-10-09"), Value = c(0.055063, 0.01851903,
0.01338099, 0.03982749, 0.04798457, 0.02433628)), row.names = c(NA,
-6L), class = c("tbl_df", "tbl", "data.frame"))