如何根据具有不同名称的列过滤列表中的数据库

How to filter databases in list based on column with different name

我有一个列表,其中包含具有不同信息的不同数据库。 每个数据库的第一列包含我创建图形所需的信息。我需要根据引用第一列的外部向量过滤信息。

例如:

mtcars2 <- mtcars %>% rownames_to_column("cars_model") %>% as.data.frame()
mtcars3 <- mtcars %>% rownames_to_column("cars_model_second") %>% as.data.frame()
list_two_database <- list(mtcars2, mtcars3)

model_to_select <- c("Fiat 128", "Honda Civic", "Lotus Europa")

有没有办法根据列表中包含的每个数据库的第一列(cars_model 和 cars_model_second)过滤列表,而不重命名列本身?

目标是获得一个列表,其中包含两个数据库,每个数据库都具有三个模型。

提前致谢

下面的工作是将第一列名称提取为字符串 first_col,然后将此字符串转换为可在 dplyr 中使用的形式:

mtcars2 <- mtcars %>% rownames_to_column("cars_model") %>% as.data.frame()
mtcars3 <- mtcars %>% rownames_to_column("cars_model_second") %>% as.data.frame()
list_two_database <- list(mtcars2, mtcars3)

model_to_select <- c("Fiat 128", "Honda Civic", "Lotus Europa")

func = function(df){
  first_col = colnames(df)[1]
  
  filter(df, !!sym(first_col) %in% model_to_select)
}

lapply(list_two_database, func)

备注:

  • sym(.)用于将文本字符串转为符号
  • !! 仅在 dplyr 命令内部起作用,并将符号转换为变量

一起使用你有类似的东西:

var = "my_col"
df %>% filter(!!sym(var) == 1)

相当于df %>% filter(my_col == 1)