test <- data.frame('prod_id'= c("shoe", "shoe", "shoe", "shoe", "shoe", "shoe", "boat", "boat","boat","boat","boat","boat"),
'seller_id'= c("a", "b", "c", "d", "e", "f", "a","g", "h", "r", "q", "b"),
'Dich'= c(1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0),
'price' = c(120, 20, 10, 4, 3, 4, 30, 43, 56, 88, 75, 44)
)
test
prod_id seller_id Dich price
1 shoe a 1 120
2 shoe b 0 20
3 shoe c 0 10
4 shoe d 0 4
5 shoe e 0 3
6 shoe f 0 4
7 boat a 0 30
8 boat g 0 43
9 boat h 1 56
10 boat r 0 88
11 boat q 0 75
12 boat b 0 44
Я хотел создать новый столбец, который берет разницу между наблюдениями в ценовом столбце на основе значения Dich, где каждое наблюдение берет свое отличие от наблюдения, где Dich == 1 в каждой группе prod_id.Синтаксис для этого приведен ниже.
test %>%
group_by(prod_id) %>%
mutate(diff_p = if(any(Dich ==1)) price - price[Dich == 1] else NA)
prod_id seller_id Dich price diff_p
1 shoe a 1 120 0
2 shoe b 0 20 -100
3 shoe c 0 10 -110
4 shoe d 0 4 -116
5 shoe e 0 3 -117
6 shoe f 0 4 -116
7 boat a 0 30 -26
8 boat g 0 43 -13
9 boat h 1 56 0
10 boat r 0 88 32
11 boat q 0 75 19
12 boat b 0 44 -12
Теперь я хотел бы создать функцию, которая использует тот же синтаксис, где я могу использовать функцию на новом фрейме данных и получить те же результаты с помощью sparklyr :: spark_apply().
trans <- function(e) {e %>%
group_by(prod_id) %>%
mutate(diff_p = if(any(Dich ==1)) price -price[Dich == 1] else NA)
}
На своем веб-сайте rstudio обсуждает использование функций R для искровых объектов.
https://spark.rstudio.com/guides/distributed-r/
Вот пример функцииэто масштабирует все столбцы искрового фрейма данных.
trees_tbl %>%
spark_apply(function(e) scale(e))
Мне интересно, как я мог бы написать функцию выше в формате, объясненном для использования с spark_apply ().Было бы полезно, если бы вы могли объяснить, как включить e в функцию, - что это означает?