我可以使用列表的元素来命名 R 循环中的 tibble 吗?

问题描述 投票:0回答:1

下面是一个非常简化的示例,但应该演示我正在尝试解决的问题

df <- tibble(
  id = rep(1:5,3),
  m1 = rnorm(15),
  m2 = rnorm(15),
  m3 = rnorm(15),
  m4 = rnorm(15),
  m5 = rnorm(15)
)

我想操作一个小标题并最终根据变量名称得到单独的小标题。我可以跑

list <- c("m1", "m2", "m3", "m4", "m5")

for (i in 1:length(list)){
  name <- list[i]
  name <- df %>%
    select(id, all_of(name))
}

这显然会覆盖循环每个周期的名称。我的目标结果是 5 个 tibbles,每个 tibbles 都调用列表中的相应值。是否可以获取名称的值而不是“名称”本身作为操作的左侧?

编辑

小标题的实际操作不是选择单个列,这就是为什么我没有使用

sapply
或类似的。最终目标是编写一个 Excel 文件,其中每个 tibble 都是一个单独的表。我现在已将代码扩展为:

list <- c("m1", "m2", "m3", "m4", "m5")

list2 <- NA

for (i in 1:length(list)){
  name <- list[i]
  sheet <- df %>%
    select(id, all_of(name))
  list2[i] <- list(name=sheet)
}

我认为命名列表元素可能更容易,但列表中的“名称”似乎被忽略了。

r loops tibble
1个回答
0
投票

你也可以重塑和分裂。每个步骤都可以通过不同的方式完成,具体取决于您喜欢的包(如果有)。在这里,使用 tidyverse 元包中的 tidyr 和 purrr 以及基本

split
rio
来写入文件。

df %>%
  tidyr::pivot_longer(-id) %>%
  split(f = .$name) %>%
  purrr::map(~select(.x, -name)) %>%
  rio::export("~/file.xlsx")
  

这将输出一个 Excel 文件,其中每列都有命名选项卡。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.