【问题标题】:Selecting with dplyr by parameters in column names通过列名中的参数使用 dplyr 进行选择
【发布时间】:2015-03-04 12:54:32
【问题描述】:

我有很多列看起来像这样的数据表:

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 可以吗?我未能传递到列的选择索引,所以我不知道该怎么做。提前致谢!

【问题讨论】:

  • 使用pasteselect_
  • 据我所知,粘贴适用于在 R 中连接字符串,而我在帮助中没有找到 select_ 函数可能是你的意思 select_vars?以及如何将这个表达式 sd1_scale1:sd1_scale13 传递给 select_vars?
  • 确保您的dplyr 是最新的。 select_()select() 的一个版本,它接受字符串作为参数。大多数dplyr 函数都有一个以下划线结尾的版本,需要字符串。

标签: r dplyr


【解决方案1】:

您可以按照 Gregor 的建议使用 select_,但您不必这样做。

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得到这个

【讨论】:

  • 退出!即使在非常复杂的链接情况下,您的解决方案也有效。非常感谢!
  • 我得到一个错误设置 x“扫描错误(文件 ... 第 1 行没有 6 个元素”
  • @MikeHoney 很难复制/粘贴标签。我已将它们更改为逗号。
猜你喜欢
  • 1970-01-01
  • 2017-03-06
  • 2018-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多