指定R中多个表的导入顺序

时间:2018-08-01 14:24:40

标签: r import text-files

我正在尝试以文本格式读取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的任何内容。任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:4)

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的{​​{1}}通话之前。