【问题标题】:R: Split large character lines into slicesR:将大字符行拆分为切片
【发布时间】:2019-07-30 14:56:26
【问题描述】:

对于包含 99150000 行的大型数据帧,以下代码将数据 my_df 拆分为 1000 行的块并写入磁盘。

lapply(seq(1, nrow(my_df), by = 1000),
       function(i) write.table(my_df[i:i+1000-1,]
                               , file = paste0('path_to_logal_dir/data'
                                               , i, '-', i+1000-1, '.csv')
                               ,row.names = F,col.names = F,quote = F)
)

现在,我有相同的字符格式数据(99150000 个元素),示例数据如下:

[1] "1979_1,532,40,7.7,12.9,116.9,12.9,85,2,2.001,4,25,55,5.3,55,85,7.7,85,145,7.5,145,265,5.0"
[2] "1979_2,532,40,7.7,12.9,116.9,12.9,85,2,2.001,4,25,55,5.3,55,85,7.7,85,145,7.5"
[3] "1979_3,532,40,7.7,12.9,116.9,12.9,85,2,2.001,4,25,55,5.3,55,85,7.7,85"
...
[99150000] ...

如何实现上述相同的任务,即将字符格式数据拆分成块(包含 1000 行的文件)?

【问题讨论】:

    标签: r split character


    【解决方案1】:

    这是一个仅使用基础 R 制作的解决方案。您可以使用 apply family 或 purrr 包轻松对其进行概括。首先我创建了一些假数据

    fake_data <- c("A", "B", "C", "D", "E", "F", "G", "H")
    fake_data
    #> [1] "A" "B" "C" "D" "E" "F" "G" "H"
    

    您希望将字符向量分成 1000 行一组。为简单起见,我将此向量分为 2 行组

    group_length <- 2
    

    这意味着字符向量的前 2 个元素属于第一组,后 2 个元素属于第二组,依此类推

    groups <- rep(1 : (length(fake_data) / group_length), each = group_length)
    groups
    #> [1] 1 1 2 2 3 3 4 4
    

    现在我将字符向量划分为基于子组

    splitted_groups <- split(fake_data, groups)
    splitted_groups
    #> $`1`
    #> [1] "A" "B"
    #> 
    #> $`2`
    #> [1] "C" "D"
    #> 
    #> $`3`
    #> [1] "E" "F"
    #> 
    #> $`4`
    #> [1] "G" "H"
    

    并创建一个 for 循环以将每个子组保存到文件中

    for (i in seq_len(length(fake_data) / group_length)) {
      table_data <- data.frame(x = splitted_groups[[i]])
      write.csv(table_data, file = paste0("data", i, ".csv"), row.names = FALSE)
    }
    

    reprex package (v0.3.0) 于 2019 年 7 月 30 日创建

    您还可以使用 purrr 包中定义的映射系列替换最后一个 for 循环。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-11
      • 1970-01-01
      • 2019-11-25
      • 2013-02-12
      • 2020-09-18
      • 1970-01-01
      • 2021-10-29
      • 2011-11-25
      相关资源
      最近更新 更多