我正在尝试在 sparklyr 中复制 tidyr:complete
函数。我有一个包含一些缺失值的数据框,我必须填写这些行。在 dplyr/tidyr 中我可以这样做:
data <- tibble(
"id" = c(1,1,2,2),
"dates" = c("2020-01-01", "2020-01-03", "2020-01-01", "2020-01-03"),
"values" = c(3,4,7,8))
# A tibble: 4 x 3
id dates values
<dbl> <chr> <dbl>
1 1 2020-01-01 3
2 1 2020-01-03 4
3 2 2020-01-01 7
4 2 2020-01-03 8
data %>%
mutate(dates = as_date(dates)) %>%
group_by(id) %>%
complete(dates = seq.Date(min(dates), max(dates), by="day"))
# A tibble: 6 x 3
# Groups: id [2]
id dates values
<dbl> <date> <dbl>
1 1 2020-01-01 3
2 1 2020-01-02 NA
3 1 2020-01-03 4
4 2 2020-01-01 7
5 2 2020-01-02 NA
6 2 2020-01-03 8
然而 complete
函数在 sparklyr
中不存在。
data_spark %>%
mutate(dates = as_date(dates)) %>%
group_by(id) %>%
complete(dates = seq.Date(min(dates), max(dates), by="day"))
Error in UseMethod("complete_") :
no applicable method for 'complete_' applied to an object of class "c('tbl_spark', 'tbl_sql', 'tbl_lazy', 'tbl')"
是否有办法设置 UDF 或实现类似的结果?
谢谢
最佳答案
在引擎盖下 tidyr::complete
只是执行一个完整的连接,然后是可选的 NA 填充。您可以通过使用 sdf_copy_to
创建一个新的 sdf 来复制其效果,它只是开始和结束日期之间的单个列 seq.Date
,然后执行 full_join
在它和你的数据集之间。
关于r - sparklyr 中的完整数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64397553/