【问题标题】:Keeping original list item names when using lapply over an existing list在现有列表上使用 lapply 时保留原始列表项名称
【发布时间】:2020-05-20 11:49:43
【问题描述】:

我将三个数据框存储在一个列表中,如下所示:

dat <- list("grp_1" = data.frame(x = sample(1:100, 100, replace = T)),
            "grp_2" = data.frame(x = sample(1:100, 100, replace = T)),
            "grp_3" = data.frame(x = sample(1:100, 100, replace = T)))

如果数据框名为“grp_1”或“grp_2”,我过滤它以仅保留前 10 行,否则,我过滤它以保留前 20 行。

dat_new <- lapply(names(dat), function(x) {
  if(x %in% c("grp_1", "grp_2")) {
    dat[[x]] <- dat[[x]] %>% 
      slice(1:10)
  } else {
    dat[[x]] <- dat[[x]] %>% 
      slice(1:20)
  }
})

我的函数正确执行,但由于某种原因,我在这样做时丢失了列表元素名称(即输出是三个未命名数据帧的列表,而不是三个名为“grp_1”、“grp_2”的数据帧,和“grp_3”)。

有人可以告诉我如何修改上面的代码,以便缩短的数据框保留其原始名称吗?

【问题讨论】:

  • setNames的一种方式:n &lt;- names(dat); dat_new &lt;- lapply(setNames(n, n), function(x) {...}

标签: r lapply


【解决方案1】:

只需添加名称:

names(dat)
# [1] "grp_1" "grp_2" "grp_3"
names(dat_new)
# NULL
names(dat_new) <- names(dat)
names(dat_new)
# [1] "grp_1" "grp_2" "grp_3"

【讨论】:

    猜你喜欢
    • 2012-03-17
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多