R dply选择名称列表

时间:2017-12-01 15:33:18

标签: r dplyr

我有一堆数据框,我需要循环并行合并某些变量。

我试图将所有列表名称放在数组中:

list_names <- c('list1','list2','list3')

然后执行sapply

output <- sapply(list_names, function(x) rbind(main list, 
    select(as.name(x), col1, col2, col3, col4)))

我遇到的fisrt错误是:

Error in UseMethod("select_") : 
  no applicable method for 'select_' applied to an object of class "character" 

我认为select语句不喜欢我传入x而不是变量名。有没有办法可以说x是变量名?我以为as.name(x)会这样做。

由于

1 个答案:

答案 0 :(得分:1)

您可以尝试get,它按列名检索数据:

可重复示例:

library(dplyr)

list_names = c("mtcars", "mtcars")

lapply(list_names, function(x) rbind(mtcars[1:3], select(get(x), mpg, cyl, disp))) 

另一种方法是将每个list_names转换为sym(来自rlang),并在调用select时对其进行整理评估:

library(rlang)

lapply(list_names, function(x) rbind(mtcars[1:3], select(eval_tidy(sym(x)), mpg, cyl, disp)))

基准R等价物:

lapply(list_names, function(x) rbind(mtcars[1:3], select(eval(as.name(x)), mpg, cyl, disp)))

OP的例子:

output <- lapply(list_names, function(x) rbind(main_list, 
    select(get(x), col1, col2, col3, col4)))

或:

output <- lapply(list_names, function(x) rbind(main_list, 
    select(eval(as.name(x)), col1, col2, col3, col4)))