【问题标题】:renaming column names with dplyr using tidyselect functions使用 tidyselect 函数使用 dplyr 重命名列名
【发布时间】:2020-01-12 11:30:08
【问题描述】:

我正在尝试使用dplyr::rename 和 tidyselect 帮助程序重命名一些列,以使用一些模式来这样做。

我怎样才能让它工作?

library(tidyverse)

# tidy output from broom (using development version)
(df <- broom::tidy(stats::oneway.test(formula = wt ~ cyl, data = mtcars)))

#> # A tibble: 1 x 5
#>   num.df den.df statistic   p.value method                                      
#>    <dbl>  <dbl>     <dbl>     <dbl> <chr>                                       
#> 1      2   19.0      20.2 0.0000196 One-way analysis of means (not assuming equ~

# renaming
df %>% 
  dplyr::rename(
  .data = .,
  parameter1 = dplyr::matches("^num"),
  parameter2 = dplyr::matches("^denom")
  )
#> Error: Column positions must be scalar

reprex package (v0.3.0.9001) 于 2020-01-12 创建

【问题讨论】:

  • 对我来说效果很好。
  • @NaremanDarwish 是的,我不确定发生了什么。在 GitHub 上提出的问题:github.com/r-lib/tidyselect/issues/160。也许莱昂内尔知道发生了什么。
  • 请添加您的sessionInfo() 以查看我们的机器与您的机器之间的任何差异。它对我来说确实很好用(也)。链接问题包含traceback,前者可能更有用(也)..
  • @NelsonGon 链接的问题还包含会话信息。
  • 啊,折叠了!与我的会话的唯一区别是您使用的是开发版的扫帚(从最后的 9000 判断)。不过,不要认为这在这里很重要。

标签: r dplyr tidyselect


【解决方案1】:

你的代码对我来说很好,但是这里有一些其他更短的方法可以帮助你,你可以试试;

library(tidyverse)

# tidy output from broom (using development version)
(df <- broom::tidy(stats::oneway.test(formula = wt ~ cyl, data = mtcars)))

#> # A tibble: 1 x 5
#>   num.df den.df statistic   p.value method                                      
#>    <dbl>  <dbl>     <dbl>     <dbl> <chr>                                       
#> 1      2   19.0      20.2 0.0000196 One-way analysis of means (not assuming equ~

# renaming
df %>% 
  rename(parameter1 = matches("^num"),
         parameter2 = matches("^denom"))

# # A tibble: 1 x 5
# parameter1 parameter2 statistic   p.value method                                               
# <dbl>      <dbl>     <dbl>     <dbl> <chr>                                                
#   1          2       19.0      20.2 0.0000196 One-way analysis of means (not assuming..

df %>% 
  rename(parameter1 = contains("num"),
         parameter2 = contains("denom"))

# # A tibble: 1 x 5
# parameter1 parameter2 statistic   p.value method                                               
# <dbl>      <dbl>     <dbl>     <dbl> <chr>                                                
#   1          2       19.0      20.2 0.0000196 One-way analysis of means (not assuming..

df %>% 
  rename(parameter1 = starts_with("num"),
         parameter2 = starts_with("denom"))

# # A tibble: 1 x 5
# parameter1 parameter2 statistic   p.value method                                               
# <dbl>      <dbl>     <dbl>     <dbl> <chr>                                                
#   1          2       19.0      20.2 0.0000196 One-way analysis of means (not assuming..

【讨论】:

    【解决方案2】:

    我们也可以从named 向量中rename

    library(dplyr)
    library(stringr)
    df %>% 
         rename(!!!set_names(names(df)[1:2], str_c('parameter', 1:2)))
    # A tibble: 1 x 5
    #  parameter1 parameter2 statistic   p.value method                                                  
    #       <dbl>      <dbl>     <dbl>     <dbl> <chr>                                                   
    #1          2       19.0      20.2 0.0000196 One-way analysis of means (not assuming equal variances)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-09
      • 2017-06-10
      • 2015-08-03
      • 2023-01-10
      • 1970-01-01
      • 2018-07-19
      • 2021-10-22
      • 1970-01-01
      相关资源
      最近更新 更多