我想在sparklyr数据帧上填充值(用以前的值替换NAs ),该字段保存字符串。
从本质上讲,我想改变这一点:
ID, String
1 a
2 NaN
3 b
4 NaN要这样做:
ID, String
1 a
2 a
3 b
4 b有没有办法在sparklyr中做到这一点?
发布于 2020-12-09 07:00:11
最近的包update for sparklyr包括fill,它的行为方式与同名的tidyr函数相同。此外,我们可以查看SQL并直接应用最后一个函数。在下面的示例中,我使用"grp“进行分区,因为我想对它进行分组,只需删除group_ by /PARTITION BY,就可以不用分组了。
创建表
a <- data.frame(vals = c(NA,NA,NA,1,NA,NA,NA,NA,NA,6,NA,NA,NA,10), row_num = 1:14, grp = c(1,1,1,1,1,1,1,2,2,2,2,2,2,2))
b <- copy_to(con,a,"example", overwrite = TRUE)在SQL中应用回填
c <- sdf_sql(con,"
SELECT*
, LAST(vals, TRUE) OVER (PARTITION BY grp ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS last_val
FROM example
")在sparklyr中应用backfull
诚然,我在使用fill函数时遇到了一些问题,但它应该是这样的。
c <- sdf_sql(con, "SELECT * FROM example")
c <- c %>% mutate(last_val = fill(val,.direction="down")或者,您可以只将SQL应用于变异体,这肯定是有效的。
c <- sdf_sql(con, "SELECT * FROM example")
c <- c %>% mutate(last_val = sql("LAST LAST(vals, TRUE) OVER (ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)"))发布于 2019-01-20 18:14:00
这适用于您的示例:
library(sparklyr)
library(tidyverse)
sc <- spark_connect(master = "local")
df<-tibble(ID=c(1,2,3,4), String=c("a",NaN,"b",NaN))
tbl_df<-sdf_copy_to(sc,df,"tbl_df",overwrite = TRUE)
tbl_df<-tbl_df%>%mutate(String=ifelse(String=="NaN",lag(String,order = ID),String))
> glimpse(tbl_df)
Observations: ??
Variables: 2
$ ID <dbl> 1, 2, 3, 4
$ String <chr> "a", "a", "b", "b"https://stackoverflow.com/questions/54253490
复制相似问题