stocksm <- structure(list(time = structure(c(14245, 14246, 14247, 14248,
14249, 14250, 14251, 14252, 14253, 14254, 14245, 14246, 14247,
14248, 14249, 14250, 14251, 14252, 14253, 14254, 14245, 14246,
14247, 14248, 14249, 14250, 14251, 14252, 14253, 14254), class = "Date"),
stock = c("X", "X", "X", "X", "X", "X", "X", "X", "X", "X",
"Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Z", "Z",
"Z", "Z", "Z", "Z", "Z", "Z", "Z", "Z"), price = c(0.239252107606609,
-1.56883100623924, 0.712087445800904, 0.0978227160929474,
-0.591439041236675, -0.430019034335168, 0.033727039296972,
-0.172634546678134, -1.30235342173481, 0.0186726500971933,
3.13359212567755, -3.1308982249284, -0.00666262981780505,
0.446884242347021, 0.865122586467621, -0.283571611040151,
-0.108833395864396, -2.18319153514799, -0.27483222045657,
0.445347442843193, -2.86909424204074, -3.46188641965012,
0.144189534381867, -14.8137095357316, -2.11457178683177,
3.23603451612312, -2.79876705700199, 0.824675151918647, -2.44132963041655,
-2.97946926198463)), row.names = c(NA, -30L), class = "data.frame")
Я хочу написать dplyr
функцию, которая выполняла бы некоторые операции только с spread
ed функцией. У меня есть код ниже, который я хотел бы обобщить. Но так как я хочу расширить произвольно введенный столбец, мне нужен другой способ захвата его подгрупп, кроме unique(.$stock)
, поскольку я не могу использовать подмножество $
с произвольным var
.
stocksm %>% {
variables <- unique(.$stock)
spread(., stock, price) %>% mutate_at(vars(variables), ~.)
}
Я имею в виду такую функцию:
mutate_subgroups <- function(data, var){
var <- enquo(var)
data %>% {
variables <- . %>% pull(!! var) %>% unique()
spread(., data, value) %>% mutate_at(vars(variables), ~.)
}
}
Но . %>% pull(stock) %>% unique()
оценивается как:
Ошибка: variables
должен вычислять позиции или имена столбцов, а не функцию
Итак, как я могу получить имена переменных, которые могут быть использованы в mutate_at
? А почему на самом деле . %>% pull(stock) %>% unique()
не работает?