小编jja*_*obs的帖子

直接更新(替换)稀疏数据帧是缓慢且低效的

我正在尝试读取几十万个JSON文件,并最终将它们放入dplyr对象中.但是JSON文件不是简单的键值解析,它们需要大量的预处理.预处理是经过编码的,效率相当高.但我遇到的挑战是将每条记录有效地加载到单个对象(data.table或dplyr对象)中.

这是非常稀疏的数据,我将有超过2000个变量,这些变量大部分都会丢失.每条记录可能有一百个变量集.变量将是字符,逻辑和数字的混合,我知道每个变量的模式.

我认为避免R为每次更新复制对象(或一次添加一行)的最佳方法是创建一个空数据框,然后在从JSON文件中提取后更新特定字段.但是在数据框中执行此操作非常慢,移动到数据表或dplyr对象要好得多,但仍希望将其减少到几分钟而不是几小时.请参阅下面的示例:

timeMe <- function() {
  set.seed(1)
  names = paste0("A", seq(1:1200))

  # try with a data frame
  # outdf <- data.frame(matrix(NA, nrow=100, ncol=1200, dimnames=list(NULL, names)))
  # try with data table
  outdf <- data.table(matrix(NA, nrow=100, ncol=1200, dimnames=list(NULL, names)))

  for(i in seq(100)) {
    # generate 100 columns (real data is in json)
    sparse.cols <- sample(1200, 100)
    # Each record is coming in as a list
    # Each column is either a character, logical, or numeric
    sparse.val <- lapply(sparse.cols, function(i) {
      if(i …
Run Code Online (Sandbox Code Playgroud)

r dplyr data.table

8
推荐指数
1
解决办法
1347
查看次数

标签 统计

data.table ×1

dplyr ×1

r ×1