【问题标题】:Specify order of import for multiple tables in R为 R 中的多个表指定导入顺序
【发布时间】:2018-08-01 14:24:40
【问题描述】:

我正在尝试以文本格式读取 360 度数据文件。我可以使用以下代码:

temp = list.files(pattern="*.txt")
myfiles = lapply(temp, read.table)

我遇到的问题是文件被命名为“DO_1,DO_2,...DO_360”,当我尝试将文件导入列表时,它们不保持这个顺序。相反,我得到 DO_1、DO_10 等。有没有办法指定导入和存储文件的顺序?我在 list.files 或 read.table 的帮助页面中没有看到任何内容。非常感谢任何建议。

【问题讨论】:

    标签: r import text-files


    【解决方案1】:

    lapply 将按照您将文件存储在temp 中的顺序处理文件。所以你的目标是按照你对它们的实际想法对它们进行排序。幸运的是,gtools 包中的mixedsort 函数可以进行您正在寻找的排序。这是一个快速演示。

    > library(gtools)
    > vals <- paste("DO", 1:20, sep = "_")
    > vals
     [1] "DO_1"  "DO_2"  "DO_3"  "DO_4"  "DO_5"  "DO_6"  "DO_7"  "DO_8"  "DO_9" 
    [10] "DO_10" "DO_11" "DO_12" "DO_13" "DO_14" "DO_15" "DO_16" "DO_17" "DO_18"
    [19] "DO_19" "DO_20"
    > vals <- sample(vals)
    > sort(vals) # doesn't give us what we want
     [1] "DO_1"  "DO_10" "DO_11" "DO_12" "DO_13" "DO_14" "DO_15" "DO_16" "DO_17"
    [10] "DO_18" "DO_19" "DO_2"  "DO_20" "DO_3"  "DO_4"  "DO_5"  "DO_6"  "DO_7" 
    [19] "DO_8"  "DO_9" 
    > mixedsort(vals) # this is the sorting we're looking for.
     [1] "DO_1"  "DO_2"  "DO_3"  "DO_4"  "DO_5"  "DO_6"  "DO_7"  "DO_8"  "DO_9" 
    [10] "DO_10" "DO_11" "DO_12" "DO_13" "DO_14" "DO_15" "DO_16" "DO_17" "DO_18"
    [19] "DO_19" "DO_20"
    

    所以在你的情况下你只想做

    library(gtools)
    temp <- mixedsort(temp)
    

    在您致电 lapply 之前致电 read.table

    【讨论】:

    • 谢谢!这完美地保持了所有文件的正确顺序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-11
    • 1970-01-01
    • 2018-03-15
    • 2012-11-28
    相关资源
    最近更新 更多