【问题标题】:Execute dplyr::select with dplyr::across使用 dplyr::across 执行 dplyr::select
【发布时间】:2020-08-29 01:28:15
【问题描述】:

我有一个数据(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'))

错误:across() 只能在 dplyr 动词中使用。

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

【问题讨论】:

  • 你能告诉你包的版本吗
  • @akrun dplyr ‘0.8.99.9002’
  • 谢谢,我在他们的 github pagee 中没有找到任何带有 select 和 cross 的示例。我在cross.R中发现Because across()`在summarise()和#'mutate()这样的函数中使用,你不能选择或计算分组变量。`
  • 可能在将来,他们可能会将该选项作为一种通用方式包含在内。弃用 _at/_all 表明所有函数的行为应该相似。
  • 嗨@neves,您可能会发现row-wisecolumn-wise 小插曲有助于理解across 的用例。

标签: r dplyr


【解决方案1】:

selectacrossgithub 页面中,没有将selectacross 一起使用的用例。根据?across文档

across() 可以轻松地将相同的转换应用于多个列,允许您在 summarise() 和 mutate() 中使用 select() 语义。 cross() 取代了“范围变体”系列,如 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_helpersstarts_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

【讨论】:

    猜你喜欢
    • 2021-01-19
    • 2021-06-21
    • 1970-01-01
    • 2021-05-16
    • 1970-01-01
    • 2021-01-01
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多