gpt4 book ai didi

使用 purrr 根据列表名称重命名列表列

转载 作者:行者123 更新时间:2023-12-01 22:55:48 27 4
gpt4 key购买 nike

我有一个命名列表,在该列表中我想根据列表的来源名称重命名它们的列。

我的方法的问题似乎是 .x 占位符,我认为它是我唯一的列表名称。但在 rename_with 函数中,.x 似乎是在每个列表数据框中计算的,而不是来自原始 .x。有什么办法可以继承原来的 .x(或列表名称)进行重命名吗?

my_list <- list(L1 = data.frame(x=1:3),
L1 = data.frame(x=1:3),
L2 = data.frame(x=1:3),
L2 = data.frame(x=1:3))

my_list |>
purrr::map(.x = unique(names(my_list)),
.f = ~my_list[names(my_list) == .x] |>
dplyr::bind_rows() |>
dplyr::rename_with(.cols = "x",
.fn = ~paste0("new_", .x)))

预期输出:

[[1]]
new_L1
1 1
2 2
3 3
4 1
5 2
6 3

[[2]]
new_L2
1 1
2 2
3 3
4 1
5 2
6 3

最佳答案

只修改2个地方:

  • 您已经为 map() 设置了 .x.f,所以第一行 (my_list | >) 是多余的。它使 my_list 被扔进 map()... 部分,这对什么都不起作用。

  • rename_with().fn部分,如果使用公式式函数,占位符.x会冲突。所以你应该使用一个基本函数并设置一个不同的参数名称。

purrr::map(.x = unique(names(my_list)),
.f = ~ my_list[names(my_list) == .x] |>
dplyr::bind_rows() |>
dplyr::rename_with(.cols = "x",
.fn = \(col) paste0("new_", .x)))

[[1]]
new_L1
1 1
2 2
3 3
4 1
5 2
6 3

[[2]]
new_L2
1 1
2 2
3 3
4 1
5 2
6 3

你也可以使用rename这样你就不用担心冲突了。

|> dplyr::rename(!!paste0("new_", .x) := x)

关于使用 purrr 根据列表名称重命名列表列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73288156/

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