我有以下代码,它给出了几个txt文件的列表,如何根据最后一个数字(1770,1780,1790,1800,700,710)重新排序列表,以便现在列表顺序按增加或减少的顺序(700,710,1770,1780,1790,1800)
> file_list <- list.files(path=folder, pattern="*.txt")
> file_list
输出:
[78] "172010_001_122C_2.0_1770.txt"
[79] "172010_001_122C_2.0_1780.txt"
[80] "172010_001_122C_2.0_1790.txt"
[81] "172010_001_122C_2.0_1800.txt"
[82] "172010_001_122C_2.0_700.txt"
[83] "172010_001_122C_2.0_710.txt"
[84] "172010_001_122C_2.0_720.txt"
答案 0 :(得分:2)
有几种方法可以做到这一点。我更喜欢使用可以使用base R处理的正则表达式。下面是一个使用stringr
包的示例
library(stringr)
## Create some example data
file_list <- c("172010_001_122C_2.0_1770.txt",
"172010_001_122C_2.0_1780.txt",
"172010_001_122C_2.0_700.txt")
我们在.txt
之前提取字符串的最后一部分。请注意,值的长度不同 - 否则我们可以直接使用substr
函数并提取相关字符。在这里,我们在.txt
之前提取所有数字。这些在字符矩阵中返回,第二列包含我们之后的内容
result <- as.numeric(str_match(file_list, "(\\d+)\\.txt")[,2])
result
[1] 1770 1780 700
然后您可以对文件名进行排序
file_list[order(result)]
[1] "172010_001_122C_2.0_700.txt" "172010_001_122C_2.0_1770.txt"
[3] "172010_001_122C_2.0_1780.txt"
答案 1 :(得分:0)
以下是基础R中使用gsub
file_list <- c("172010_001_122C_2.0_1770.txt",
"172010_001_122C_2.0_1780.txt",
"172010_001_122C_2.0_700.txt")
file_list[order(as.numeric(gsub(".+_(\\d+)\\.txt$", "\\1", file_list)))]
# [1] "172010_001_122C_2.0_700.txt" "172010_001_122C_2.0_1770.txt"
# [3] "172010_001_122C_2.0_1780.txt"
说明:我们匹配表达式.+_
后跟数字\\d+
后跟.txt
,并按增加数字排序。