【问题标题】:Adding empty line between each file when using lapply使用 lapply 时在每个文件之间添加空行
【发布时间】:2020-01-02 23:44:34
【问题描述】:

我需要将一个文件夹中的所有 csv 文件合并为一个 csv 文件。但是,我需要在合并的 CSV 文件中的每个文件内容之间留一个空行。这是为了帮助区分不同的文件并为以后输入正确的格式。下面我附上了使用 lapply 合并文件的工作代码,我将不胜感激有关如何修改此代码以在每次合并之前添加空行的任何想法。谢谢。

    filenames <- list.files(full.names=TRUE)
    Combined <- lapply(filenames,function(x){
    read.csv(x, header=FALSE)})

【问题讨论】:

    标签: r csv merge


    【解决方案1】:

    您只需在每个数据帧的末尾添加一行 NA 值,然后 rbind 将数据帧放在一起。

    例如:

    All <- lapply(filenames,function(i){
        dat = read.csv(i, header=FALSE)
        dat[nrow(dat)+1,] = NA
        return(dat)
        })
    

    【讨论】:

    • 如果All 是一个列表,那么nrow 应该如何处理它?这将与incorrect number of subscripts on matrix 出错。 (我认为如果你在返回之前在lapply 中执行NA 分配会很好。)
    • 你说的很对,谢谢。我用更正更新了我的答案。
    【解决方案2】:

    在写入之前尝试在每一帧中添加一个空白 (NA) 行:

    list_of_frames <- list(head(mtcars, 3), head(mtcars, 2))
    lapply(list_of_frames, function(x) { x[nrow(x)+1,] <- NA; x})
    # [[1]]
    #                mpg cyl disp  hp drat    wt  qsec vs am gear carb
    # Mazda RX4     21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
    # Mazda RX4 Wag 21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
    # Datsun 710    22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
    # 4               NA  NA   NA  NA   NA    NA    NA NA NA   NA   NA
    # [[2]]
    #               mpg cyl disp  hp drat    wt  qsec vs am gear carb
    # Mazda RX4      21   6  160 110  3.9 2.620 16.46  0  1    4    4
    # Mazda RX4 Wag  21   6  160 110  3.9 2.875 17.02  0  1    4    4
    # 3              NA  NA   NA  NA   NA    NA    NA NA NA   NA   NA
    

    【讨论】:

    • 当我尝试这个时,我得到了错误“x[nrow(x) + 1, ]
    • 不知道,Dg1,它按照发布的方式工作。您是从实际的数据框列表开始的吗?
    猜你喜欢
    • 2010-11-19
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 2018-06-15
    • 1970-01-01
    • 1970-01-01
    • 2013-10-21
    • 1970-01-01
    相关资源
    最近更新 更多