Select 个列表中的 tibbles 列基于另一个列表中的值
Select columns of tibbles in a list based on the values from the other list
我有一个 tibbles 列表:
dfs <- list()
dfs[["mtcars"]] <- mtcars
dfs[["iris"]] <- iris
dfs[["ToothGrowth"]] <- ToothGrowth
我想将一个函数应用到基于此列表选择 tibbles 列的列表:
select_columns <- list()
select_columns[["mtcars"]] <- c("mpg", "vs:carb")
select_columns[["iris"]] <- c("Sepal.Length:Petal.Length", "Species")
两个列表的名称相同,但有些未包含在 select_columns
!
中
所以最后我想获得与 dfs
相同的 tibbles 列表,但只包含 select_columns
中指定的列。如果 select_columns
中未提及 tibble,请将其从 dfs
中删除。
我想使用 purrr
来完成。
我认为 lapply
和 map
的组合在这里可以工作。代码:
require(dplyr)
require(purrr)
newDfs=setNames(lapply(names(dfs),function(name){
if(length(select_columns[[name]])>0){
bind_cols(map(select_columns[[name]],~dplyr::select_(.data=dfs[[name]],.x)))
}else{
NULL
}
}),names(dfs))
newDfs=newDfs[-which(sapply(newDfs, is.null))]
如果成功了请告诉我。
library(purrr)
library(dplyr)
map2(
dfs[names(select_columns)],
select_columns,
~do.call("select_", c(list(.x), as.list(.y)))
)
这通过对 data.frame - select 向量。在这种情况下,它是:
- mtcars - c("mpg", "vs:carb")
- 虹膜-c("Sepal.Length:Petal.Length", "Species").
在每个步骤中,它都会构造并评估一个 dplyr::select_
调用。对于第一对,例如构造的调用看起来像 select_(mtcars, "mpg", "vs:carb")
。然后在列表中返回所有调用的结果。
我有一个 tibbles 列表:
dfs <- list()
dfs[["mtcars"]] <- mtcars
dfs[["iris"]] <- iris
dfs[["ToothGrowth"]] <- ToothGrowth
我想将一个函数应用到基于此列表选择 tibbles 列的列表:
select_columns <- list()
select_columns[["mtcars"]] <- c("mpg", "vs:carb")
select_columns[["iris"]] <- c("Sepal.Length:Petal.Length", "Species")
两个列表的名称相同,但有些未包含在 select_columns
!
中
所以最后我想获得与 dfs
相同的 tibbles 列表,但只包含 select_columns
中指定的列。如果 select_columns
中未提及 tibble,请将其从 dfs
中删除。
我想使用 purrr
来完成。
我认为 lapply
和 map
的组合在这里可以工作。代码:
require(dplyr)
require(purrr)
newDfs=setNames(lapply(names(dfs),function(name){
if(length(select_columns[[name]])>0){
bind_cols(map(select_columns[[name]],~dplyr::select_(.data=dfs[[name]],.x)))
}else{
NULL
}
}),names(dfs))
newDfs=newDfs[-which(sapply(newDfs, is.null))]
如果成功了请告诉我。
library(purrr)
library(dplyr)
map2(
dfs[names(select_columns)],
select_columns,
~do.call("select_", c(list(.x), as.list(.y)))
)
这通过对 data.frame - select 向量。在这种情况下,它是:
- mtcars - c("mpg", "vs:carb")
- 虹膜-c("Sepal.Length:Petal.Length", "Species").
在每个步骤中,它都会构造并评估一个 dplyr::select_
调用。对于第一对,例如构造的调用看起来像 select_(mtcars, "mpg", "vs:carb")
。然后在列表中返回所有调用的结果。