gpt4 book ai didi

R 在列表列工作流中使用 dplyr::select()

转载 作者:行者123 更新时间:2023-12-04 08:42:11 24 4
gpt4 key购买 nike

我有一个大数据框列表,我想对每个数据框进行子集化,只保留某些列。我想要的列的名称包含在每个数据框唯一的字符向量中。
一种方法是使用列表列工作流。我会用 data 创建一个数据框包含数据框的列表列和 cols包含字符的列表列
向量。
它的实际应用将包括一个包含 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()将列名的向量视为列表,而不是向量。我很难过如何改变这种行为。
在此先感谢您的帮助!

最佳答案

两者都是list列。我们可以通过unlist提取使用 [[ 进行或提取在 select

dplyr::select(df_list_col$data[[1]], unlist(df_list_col$cols))
或其他选项 !!!
select(df_list_col$data[[1]], !!! df_list_col$cols)

或使用 tidyverse句法
library(dplyr)
library(purrr)
df_list_col %>%
mutate(subset = map2(data, cols, ~ .x %>% select(all_of(.y))))
-输出
# A tibble: 1 x 3
# data cols subset
# <list> <list> <list>
#1 <tibble [10 × 4]> <chr [2]> <tibble [10 × 2]>

或与 pmap
df_list_col %>%
mutate(subset = pmap(cur_data(), ~ select(..1, all_of(..2 ))))

关于R 在列表列工作流中使用 dplyr::select(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64508272/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com