【发布时间】:2020-09-23 14:31:49
【问题描述】:
我有一个包含 11 个数据框的 list,每个数据框的名称都描述了它的来源。本质上,我想为列表中的每个数据框添加一个“源”列,其中包含每个单元格中数据框的名称。
这一切都是为了让数据可以向下游传递到不能很好地与列表配合使用的 CRAN 包。
我尝试使用 lapply 并查看了其他一些 SO 答案,但似乎没有什么适合。
非常感谢任何帮助,
- 谢谢
## Some toy data
p1 <- c("A", "B", "C", "D", "E")
p2 <- c(rnorm(5, 1.25, 1))
p3 <- c(rnorm(5, 1.25, 1))
source_name_1 <- data.frame(p1, p2, p3)
p2 <- c(rnorm(5, 1.25, 1))
p3 <- c(rnorm(5, 1.25, 1))
source_name_2 <- data.frame(p1, p2, p3)
p2 <- c(rnorm(5, 1.25, 1))
p3 <- c(rnorm(5, 1.25, 1))
source_name_3 <- data.frame(p1, p2, p3)
df_list <- list(source_name_1,
source_name_2,
source_name_3)
names(df_list) = paste0("source_name_", 1:length(df_list))
## Previous attempt based on other SO answers
df_list_2 <- lapply(names(df_list),
function(x) cbind(df_list),
source = names(df_list),
SIMPLIFY = TRUE)
#essentially I'm aiming for a 'p4' column in each df comprised of `^source_name[1-9]`
【问题讨论】:
-
你的列表没有名字,所以
names(df_list)会返回NULL,如何得到source_name?是否必须为每个数据框手动定义? -
啊,感谢您接受这个问题,我将编辑问题。是的,我正在修改导入到 R 的源名称,原始名称只是“sheet1”、“sheet2”等。
-
不用担心我的解决方案对您有用吗?
-
是的,感谢您的帮助,我现在已经实现了。我想知道,我可以使用类似的方法来更改列名吗?
-
是的,您想在建立列表后重命名它们吗?例如,您可以添加到最后一个命令 `%>% purrr::map(~ rename(.x, new_name = p1, another_name = p2))`
标签: r list dataframe lapply spectrum