【问题标题】:Loop among various dataframes in R在R中的各种数据帧之间循环
【发布时间】:2022-01-08 11:06:47
【问题描述】:

我有几个数据框(df1、df2、...、df1000),它们都是嵌套列表格式,并且具有完全相同的结构。访问每个数据帧的数据很简单:只需要​​运行以下代码行:

df1_data <- df1$CompactData$DataSet$Series

由于我有将近一千个数据帧,我创建了一个包含这些 dfs 名称的列表,以便在循环中使用它们,这样我就可以像上面的示例一样获得所需的数据。但是,我无法找到答案,也无法自己找到解决方案。

list_of_names <- list(df1, df2, …, df1000)

for (df in length(list_of_names)) {
  list_of_names[[df]] = list_of_names[[df]]$CompactData$DataSet$Series
}

基本上,我想要实现的是使用我真正需要的数据创建新的数据框。

任何帮助将不胜感激。

提前致谢!

【问题讨论】:

标签: r dataframe loops


【解决方案1】:

这有点乱,但你可以使用eval(parse())

for(df in 1:length(list_of_names)) {
  list_of_names[[df]] = eval(parse(text = paste0(list_of_names[[df]], '$CompactData$DataSet$Series')))
}

或者,如果您将数据框放在一个列表中,而不仅仅是名称,您可以使用lapply()map()

# given list of data.frames, called df_list
df_sub <- lapply(df_list, function(x) x$CompactData$DataSet$Series)

df_sub 将在df_list 中包含您想要的所有data.frames 子集。这种方法的优点是更易于管理 data.frames 列表,并且代码更易于阅读。

【讨论】:

    【解决方案2】:

    如果我正确理解您的数据,我将首先将您的所有依次命名为df1df2df3、...的list

    start_list = mget(paste0("df", 1:1000))
    

    然后像你的循环这样的东西应该可以工作。我已经通过 (a) 在 1:length()) 循环设置中添加 1: 和 (b) 迭代输入而不是结果来改变事情:

    result = list()
    for (df in 1:length(list_of_names)) {
      result[[df]] = start_list[[df]]$CompactData$DataSet$Series
    }
    

    如果您需要比这更多的帮助,请分享您的数据的可重现样本(对于嵌套列表结构,这无疑是困难的。str(df1) 将是一个好的开始......)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-24
      • 2015-07-27
      • 2019-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-02
      • 1970-01-01
      相关资源
      最近更新 更多