首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将函数中的多个列名传递给dplyr::distinct() with Spark

将函数中的多个列名传递给dplyr::distinct() with Spark
EN

Stack Overflow用户
提问于 2021-05-27 17:19:00
回答 1查看 389关注 0票数 0

我希望在将使用dplyr::distinct()的函数中指定一个未知数目的列名。我目前的尝试是:

代码语言:javascript
复制
myFunction <- function(table, id) {
  table %>%
    dplyr::distinct(.data[[id]])
}

我正在尝试上面的[.data[[id]]],因为这个dplyr博客的数据掩蔽部分。声明:

当您有一个作为字符向量的env变量时,您需要在.data代词中加上[[,类似于摘要(df,均=平均值(.data[var]))“索引。

dplyr::distinct()的文档说明了它的第二个论点:

确定唯一性时使用的<data-masking>可选变量。如果给定的输入组合有多行,则只保留第一行。如果省略,将使用所有变量。

火花

更具体地说,我试图在Spark中使用这个函数。

代码语言:javascript
复制
sc <- sparklyr::spark_connect(local = "master")
mtcars_tbl <- sparklyr::copy_to(sc, mtcars, "mtcars_spark")

##### desired return
mtcars_tbl %>% dplyr::distinct(cyl, gear)
# Source: spark<?> [?? x 2]
    cyl  gear
  <dbl> <dbl>
1     6     4
2     4     4
3     6     3
4     8     3
5     4     3
6     4     5
7     8     5
8     6     5

##### myFunction fails
id = c("cyl", "gear")
myFunction(mtcars_tbl, id)
 Error: Can't convert a call to a string
Run `rlang::last_error()` to see where the error occurred. 

这句话之后,我还有其他失败的尝试:

代码语言:javascript
复制
myFunction <- function(table, id) {
    table %>%
        dplyr::distinct(.dots = id)
}

myFunction(mtcars_tbl, id)
# Source: spark<?> [?? x 1]
  .dots           
  <list>          
1 <named list [2]>


#####


myFunction <- function(table, id) {
    table %>%
        dplyr::distinct_(id)
}

myFunction(mtcars_tbl, id)
Error in UseMethod("distinct_") : 
  no applicable method for 'distinct_' applied to an object of class "c('tbl_spark', 'tbl_sql', 'tbl_lazy', 'tbl')"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-27 21:13:56

Distinct一次适用于表的所有列。考虑一个示例表:

代码语言:javascript
复制
A     B
1     4
1     4
2     3
2     3
3     3
3     5

不清楚什么适用于只适用于A栏,而不适用于B栏。下面的示例显然不是一个好的选择,因为它打破了列A和B之间的关系--例如,原始数据集中没有(A = 2,B= 4)行。

代码语言:javascript
复制
A     B
1     4
2     4
3     3
      3
      3
      5

因此,最好的方法是只选择您首先想要的列,然后选择不同的列。更像是:

代码语言:javascript
复制
myFunction <- function(table, id) {
  table %>%
    dplyr::select(dplyr::all_of(id)) %>%
    dplyr::distinct()
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67727037

复制
相关文章

相似问题

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