我有一个列表,其中包括具有不同信息的不同数据库。每个数据库的第一列包含创建图形所需的信息。我需要根据指向第一列的外部向量来过滤信息。
例如:
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)