使用dplyr和select_()从数据框中选择列列表

时间:2015-07-23 15:42:56

标签: r dplyr

我正在尝试使用以下函数从数据框中提取一些列:

library('dplyr')
desired_columns = c(
  'a',
  'b',
  'c')
extract_columns <- function(data) {
  extracted_data <- data %>%
    select_(desired_columns)
  return(extracted_data)
}

但是当我尝试它时,我得不到我的期望:

> df <- data.frame(a=1:5, b=1:5, c=1:5, d=1:5)
> df
  a b c d
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4
5 5 5 5 5
> extract_columns(df)
  a
1 1
2 2
3 3
4 4
5 5

我似乎只是第一列,我无法弄清楚我做错了什么。如何获取所有请求的列?

3 个答案:

答案 0 :(得分:7)

您只是错过.dots中的select_参数:

extract_columns <- function(data) {
    extracted_data <- data %>%
        select_(.dots = desired_columns)
    return(extracted_data)
}

extract_columns(df)
  a b c
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
5 5 5 5

答案 1 :(得分:2)

在这种情况下,您必须使用.dots参数来传递矢量(或列表):

select_(.dots = desired_columns)

它似乎与懒惰有关。

答案 2 :(得分:0)

tibble 是数据帧的 tidyverse/dplyr 版本。由于 select() 是一个 dplyr 函数,您可以将数据帧转换为 tibble 并直接使用 select 和变量列表来返回另一个 tibble。

df = data.frame(a=1:5, b=1:5, c=1:5, d=1:5)
desired_columns = c( 'a', 'b', 'c')
df %>% as_tibble() %>% select(desired_columns)