【发布时间】: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 <- names(dat); dat_new <- lapply(setNames(n, n), function(x) {...}