使用dplyr::across执行dplyr::select

4

我有一份数据(df_1):

df_1 <- structure(list(var_1 = c(99.4726192392409, 25.9155194833875), 
var_2 = c(99.9599985964596, 20.3848657943308), var_3 = c(93.1612774543464, 
31.651863809675), var_4 = c(54.2802151478827, 81.9601702317595
), var_5 = c(88.1385736726224, 94.7823309898376), var_6 = c(83.7288120947778, 
72.2155329957604), groups = structure(c(1L, 1L), .Label = c("1", 
"2", "3"), class = "factor")), row.names = c(1L, 10L), class = "data.frame")

我尝试:

library(dplyr)

df_1 %>% 
  select_at(.vars = 'var_1')

      var_1
1  99.47262
10 25.91552

没问题。但是:

df_1 %>% 
  select(across(.cols = 'var_1'))

错误:只能在dplyr动词内部使用across()

如何使用selectacross来调整此最后一个函数?


1
谢谢,我在他们的Github页面上没有找到任何带有select和across的示例。我在across.R中发现“因为across()在像summarise()mutate()这样的函数中使用,所以您不能选择或计算分组变量。” - akrun
我只是想到可能有一种方法可以将这两个函数结合起来。 - neves
1
也许在未来,他们会将该选项作为一种通用方式加入。"_at/_all"的弃用表明行为应在所有函数中保持类似。 - akrun
只是想知道 _if 是否已经被弃用,那么可能需要使用 across - akrun
1
嗨@neves,您可能会发现row-wisecolumn-wise的文档对于理解across的用例非常有帮助。 - Ian Campbell
显示剩余6条评论
1个回答

1
selectacrossgithub 页面上看,没有使用 selectacross 结合的用例。根据 ?across 文档,

across() 使得对多列应用相同的变换变得容易,允许您在 summarise() 和 mutate() 中使用 select() 语义。across() 取代了"scoped variants"系列,如 summarise_at()、summarise_if() 和 summarise_all()。有关更多详情,请参见 vignette("colwise")。

未提到要与 select 结合使用。
在当前版本中,select 可以接受带引号和不带引号的变量。
library(dplyr)
df_1 %>%
       select('var_1')
#     var_1
#1  99.47262
#10 25.91552

df_1 %>% 
     select('var_1', 'var_2')
#      var_1    var_2
#1  99.47262 99.96000
#10 25.91552 20.38487


df_1 %>% 
      select(var_1, var_2)

或者使用 select_helpers 中的 starts_with/ends_with/matches/contains

df1_1 %>% 
      select(starts_with('var'))
#       var_1    var_2
#1  99.47262 99.96000
#10 25.91552 20.38487

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接