通过列名称中的参数选择dplyr

时间:2015-01-06 19:25:34

标签: r dplyr

我的数据表包含许多列,如下所示:

  

sd1_scale1 sd1_scale2 sd1_scale3 ... sd2_scale1 sd2_scale2 ...等等

我使用dplyr处理这些数据并以这种方式使用select:

  select(code_group, sd1_scale1:sd1_scale13)

我想编写一个带数字(sd编号)的函数并按此选择列,看起来像这样:

 makeData <- function(sdNumber) {

       return select(code_group, sd{sdNumber}_scale1:sd{sdNumber}_scale13)

    }

是否可以使用dplyr?我没有传入列的选择索引,所以我不知道如何做到这一点。提前谢谢!

1 个答案:

答案 0 :(得分:11)

您可以使用select_作为Gregor建议,但您不必这样做。

library(dplyr)

x <- read.csv(text = "sd1_scale1,sd1_scale2,sd1_scale3,sd2_scale1,sd2_scale2,sd2_scale3
1,2,3,4", header = TRUE)


makeData1 <- function(x, sdNumber) {
  # Using `one_of` as explained in ?select
  select(x, one_of(paste0("sd", sdNumber, "_scale", 1:2)))
}

makeData2 <- function(x, sdNumber) {
  # Same effect using nonstandard evaluation, see vignette("nse")
  select_(x, .dots = paste0("sd", sdNumber, "_scale", 1:2))
}

x %>% makeData1(2)    
x %>% makeData2(2) # same result

我是从this gist

得到的