首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sparklyr用字符串填充

Sparklyr用字符串填充
EN

Stack Overflow用户
提问于 2019-01-18 19:53:49
回答 2查看 235关注 0票数 2

我想在sparklyr数据帧上填充值(用以前的值替换NAs ),该字段保存字符串。

从本质上讲,我想改变这一点:

代码语言:javascript
复制
ID, String
1    a
2    NaN
3    b
4    NaN

要这样做:

代码语言:javascript
复制
ID, String
1    a
2    a
3    b
4    b

有没有办法在sparklyr中做到这一点?

EN

回答 2

Stack Overflow用户

发布于 2020-12-09 07:00:11

最近的包update for sparklyr包括fill,它的行为方式与同名的tidyr函数相同。此外,我们可以查看SQL并直接应用最后一个函数。在下面的示例中,我使用"grp“进行分区,因为我想对它进行分组,只需删除group_ by /PARTITION BY,就可以不用分组了。

创建表

代码语言:javascript
复制
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中应用回填

代码语言:javascript
复制
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函数时遇到了一些问题,但它应该是这样的。

代码语言:javascript
复制
c <- sdf_sql(con, "SELECT * FROM example")
c <- c %>% mutate(last_val = fill(val,.direction="down")

或者,您可以只将SQL应用于变异体,这肯定是有效的。

代码语言:javascript
复制
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)"))
票数 0
EN

Stack Overflow用户

发布于 2019-01-20 18:14:00

这适用于您的示例:

代码语言:javascript
复制
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"
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54253490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档