我希望在将使用dplyr::distinct()的函数中指定一个未知数目的列名。我目前的尝试是:
myFunction <- function(table, id) {
table %>%
dplyr::distinct(.data[[id]])
}我正在尝试上面的[.data[[id]]],因为这个dplyr博客的数据掩蔽部分。声明:
当您有一个作为字符向量的env变量时,您需要在.data代词中加上[[,类似于摘要(df,均=平均值(.data[var]))“索引。
dplyr::distinct()的文档说明了它的第二个论点:
确定唯一性时使用的
<data-masking>可选变量。如果给定的输入组合有多行,则只保留第一行。如果省略,将使用所有变量。
火花
更具体地说,我试图在Spark中使用这个函数。
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. 继这句话之后,我还有其他失败的尝试:
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')"发布于 2021-05-27 21:13:56
Distinct一次适用于表的所有列。考虑一个示例表:
A B
1 4
1 4
2 3
2 3
3 3
3 5不清楚什么适用于只适用于A栏,而不适用于B栏。下面的示例显然不是一个好的选择,因为它打破了列A和B之间的关系--例如,原始数据集中没有(A = 2,B= 4)行。
A B
1 4
2 4
3 3
3
3
5因此,最好的方法是只选择您首先想要的列,然后选择不同的列。更像是:
myFunction <- function(table, id) {
table %>%
dplyr::select(dplyr::all_of(id)) %>%
dplyr::distinct()
}https://stackoverflow.com/questions/67727037
复制相似问题