r语言 - 如何根据不同名称的列筛选列表中的数据库



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

例如:

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)

最新更新