【发布时间】:2020-10-23 23:01:33
【问题描述】:
我有一个大型数据框列表,我想对每个数据框进行子集化,只保留某些列。我想要的列名包含在每个数据帧唯一的字符向量中。
执行此操作的一种方法是使用列表列工作流程。我将创建一个数据框,其中 data list-column 保存数据框,cols list-column 保存字符
向量。
真正的应用将包括一个包含 24 个大型数据集的列表,以及一个包含 24 个独特字符向量的列表。下面是这个数据结构的一个最小例子来说明这个问题:
set.seed(2346)
df <- tibble(
col1 = sample(c(0,1), replace=T, size=10),
col2 = sample(c(0,1), replace=T, size=10),
col3 = sample(c(0,1), replace=T, size=10),
col4 = sample(c(0,1), replace=T, size=10)
)
cols <- c("col1", "col3")
df_list_col <- tibble(
data = list(df),
cols = list(cols)
)
df_list_col 具有列表列结构,但仅在一行中。
我尝试的解决方案是创建第三个列表列来保存 子集的数据帧。因此:
df_output <- df_list_col %>%
mutate(subset = select(.$data, !!.$cols))
但这会返回错误:
# Error: Problem with `mutate()` input `subset`.
# x `select()` doesn't handle lists.
# ℹ Input `subset` is `select(.$data, list(c("col1", "col3")))`.
我也尝试使用purrr::map 来应用该功能:
df_output <- df_list_col %>%
mutate(subset = map(.$data, ~ select(.x, !!.$cols)))
但这会返回类似的错误。在这两种情况下,select() 都将列名的向量视为列表,而不是向量。我对如何改变这种行为感到困惑。
提前感谢您的帮助!
【问题讨论】: