【问题标题】:R: rbind a vector of dataframes and getting a list of dataframesR:rbind 数据帧向量并获取数据帧列表
【发布时间】:2022-06-16 23:30:58
【问题描述】:

我正在尝试在 r 中 rbind 一系列数据帧。每个数据帧具有相同的基本结构。这是一个数据框的样子。

  data1 <- data.frame (id = c (1000, 1001, 1002, 1003),
                       time = c(1, 1, 1, 1),
                       start = c(1/1/2020, 1/1/2020, 1/1/2020, 1/1/2020),
                       end = c (1/2/2020, 1/3/2020, 1/4/2020, 1/2/2020)    )
 

我创建了一些代码来生成所有数据帧的列表。在我的项目中,数据帧的数量将根据具体任务而改变。用户将输入他们期望有多少帧。数据框列表将生成所有数据框的列表。

# listing of dataframes
# in this example, lets say we have 100 dataframes
numberofdataframes <- 1:100  
# create a listing of all new frames
dataframelist <- paste0 ("data", numberofdataframes, sep = "", collapse = NULL)
dataframelist 

我的计划是重新绑定我创建的这个数据框列表。

rbind (dataframelist )

这是我期望的输出。

id   time  start     end
1000 1     1/1/2020  1/2/2020
1000 1     1/1/2020  1/3/2020
1000 1     1/1/2020  1/4/2020
1000 1     1/1/2020  1/2/2020
1000 2     2/1/2020  2/2/2020
1000 2     2/1/2020  2/2/2020
1000 2     2/1/2020  2/2/2020
1000 2     2/1/2020  2/2/2020
1000 3     3/1/2020  3/2/2020
1000 3     3/1/2020  3/2/2020
1000 3     3/1/2020  3/2/2020
1000 3     3/1/2020  3/2/2020

etc. 

但是,当我运行代码时,我只得到一个数据帧列表的 rbind。

"data1"
"data2"
"data3"
etc. 

我在网上查了一下,我尝试了几种不同的解决方案。一种方法是使用 do.call (Recombining a list of Data.frames into a single data frame)。这种方法给了我完全相同的错误。并尝试使用 do.call ,我得到了同样的错误。

其他解决方案推荐使用 rbindlist。当我使用 rbind list 时,我得到一个稍微不同的错误。

>   rbindlist (dataframelist )
Error in rbindlist(dataframelist ) : 
  Item 1 of input is not a data.frame, data.table or list

我认为 r 不会将 dataframelist 中的项目解释为数据帧而是字符。使用 rbindlist 或 do.call 时,数据帧列表应该是什么样子。我认为这可能是问题所在?

【问题讨论】:

    标签: r dataframe rbind


    【解决方案1】:

    构造的dataframelist 是对象名称的vector。我们需要获取对象的值,这可以通过 mget 完成 - 在 list 中返回它(假设这些是在全局环境中创建的对象)

    library(data.table)
    rbindlist(mget(dataframelist))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-19
      • 2020-10-12
      • 1970-01-01
      • 2017-06-27
      • 1970-01-01
      • 1970-01-01
      • 2021-07-25
      • 1970-01-01
      相关资源
      最近更新 更多