【问题标题】:How to loop over several lists to make dataframes in R?如何遍历多个列表以在 R 中制作数据框?
【发布时间】:2016-09-28 15:01:38
【问题描述】:

我需要创建一个循环来将多个列表转换为数据帧,然后将每个数据帧写入 csv。我的意思是,我想 (i) 运行一个循环以取消列出我的所有列表 + 将它们转换为 data.frames,然后 (ii) 将每个列表写入 CSV。

我运行了以下脚本,它适用于我的一个列表,但我需要对其中许多列表执行相同的操作。

在数据框中转换嵌套列表(例如,list1)的脚本,并写入为 CSV

data <- as.data.frame(t(do.call(rbind,unlist(list1,recursive = FALSE))))
write.csv(data,"list1.csv"))

请注意,“list1”是我作为示例编写的列表之一。我创建了一个脚本 (done &lt;- ls(pattern="list")) 来获取一个向量,其中包含我在 R 环境中加载的所有列表的名称。因此,我应该将步骤 (i) 和 (ii) 应用于“完成”向量中的所有名称。现在清楚了吗?

如果您能帮我创建循环,我将不胜感激?

【问题讨论】:

  • 你试过data.frame(list1)吗?在 R 中,data.frame 只是一堆垂直打印在一起的列表。这种语法甚至适用于嵌套列表,假设每个子列表都是您预期的 data.frame 的一列。
  • 我已经知道如何从每个列表中检索每个数据帧(请参阅上面提供的脚本),但问题是我有很多列表,我想对所有人运行相同的脚本其中。所以我需要一个循环。
  • 一个类似的问题/答案here

标签: r list loops


【解决方案1】:
for(i in 1:nrow(done){
       list_name <- done[i]
       data <- as.data.frame(t(do.call(rbind,unlist(noquote(list_name),recursive = FALSE))))
       write.csv(data,paste0(list_name,".csv"))
}

【讨论】:

  • 我认为它几乎就在那里,但我收到以下错误: do.call(rbind, unlist(noquote(list_name), recursive = FALSE)) 中的错误:第二个参数必须是一个列表
【解决方案2】:
fun <- function(x){
  data <- as.data.frame(t(do.call(rbind,unlist(paste0("list",x),recursive = FALSE))))
  write.csv(data,paste0("list",x,".csv"))
}

fun(1:n)

我相信这是最有效的方法。

【讨论】:

    猜你喜欢
    • 2020-12-16
    • 2020-09-16
    • 1970-01-01
    • 1970-01-01
    • 2020-09-11
    • 1970-01-01
    • 2021-02-08
    • 2023-03-26
    • 1970-01-01
    相关资源
    最近更新 更多