r - 如何使用dplyr基于字符串选择列

标签 r dplyr

我可以像这样选择和重命名列名,没有任何问题:


library(tidyverse)
iris <- as.tibble(iris)
iris %>% select(sepal_ln = Sepal.Length, sepal_wd = Sepal.Width)
#> # A tibble: 150 × 2
#>    sepal_ln sepal_wd
#>       <dbl>    <dbl>
#> 1       5.1      3.5
#> 2       4.9      3.0
#> 3       4.7      3.2
#> 4       4.6      3.1
#> 5       5.0      3.6
#> 6       5.4      3.9
#> 7       4.6      3.4
#> 8       5.0      3.4
#> 9       4.4      2.9
#> 10      4.9      3.1
#> # ... with 140 more rows

但是我想做的是从字符串而不是列名中调用列。我尝试了以下但失败了:

> wanted <- "Sepal"
> iris %>% select(sepal_ln = !! paste0(wanted,".Length"), 
+                 sepal_wd = !! paste0(wanted,".Width"), 
+ )
Error: "Sepal.Length", "Sepal.Width": must resolve to integer column positions, not string
> 

这样做的正确方法是什么?

最佳答案

我们可以使用 select_

 iris %>% 
   select_(sepal_ln = paste0(wanted, ".Length"), paste0(wanted, ".Width"))

此外,select 中还有包装器。更容易地做到这一点,即 one_of , contains , matches等从数据中选择所需的列
iris %>% 
  select(setNames(one_of(paste0(wanted, c(".Length", ".Width"))),
                 c("sepal_ln", "sepal_wd"))) %>%
  head(2)
# A tibble: 2 × 2
#   sepal_ln sepal_wd
#     <dbl>    <dbl>
#1      5.1      3.5
#2      4.9      3.0

注意:不清楚是否 select_方法将在下一个 dplyr 中被弃用是否发布( 0.6.0 )。

关于r - 如何使用dplyr基于字符串选择列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43625653/

相关文章:

r - 在 R 中处理时间戳

r - 在 R/Shiny 中获取用户的当前日期和时间

r - 在 R 中的数据框中将 NA 转换为数字的问题

r - dplyr:按 NSE 中的位置选择列

r - 使用 purrr::map (unlist, t, as_tibble) 在 R 中取消嵌套 JSON 时丢失名称

r - 删除sparklyr中的NA列

R dplyr : Write list output to dataframe

r - src_snowflakedb() 问题 : 'src_sql' is not an exported object

r - 使用plyr按类别计算最频繁的级别

r - 使用 dplyr 汇总时省略 NA