我有一个包含一些元素的列表。
$y
[1] "/data/y_11_au_fg.txt"
[2] "/data/y_11_sp_fg.txt"
[3] "/data/y_11_su_fg.txt"
[4] "/data/y_11_wi_fg.txt"
[5] "/data/y_12_au_fg.txt"
[6] "/data/y_12_sp_fg.txt"
[7] "/data/y_12_su_fg.txt"
[8] "/data/y_12_wi_fg.txt"
这些文件是根据11 and 12
编号排序的,但是我还需要特定的订单au then wi then sp then su
需要最终输出:
$y
[1] "/data/y_11_au_fg.txt"
[2] "/data/y_11_wi_fg.txt"
[3] "/data/y_11_sp_fg.txt"
[4] "/data/y_11_su_fg.txt"
[5] "/data/y_12_au_fg.txt"
[6] "/data/y_12_wi_fg.txt"
[7] "/data/y_12_sp_fg.txt"
[8] "/data/y_12_su_fg.txt"
答案 0 :(得分:1)
由于这是自定义order
,我们会遍历list
元素(lapply(lst, ..
),使用gsub
提取数字部分,转换为numeric
('v1'),类似地只提取具有'au / wi / sp / su'('v2')的子串部分,将其转换为factor
类,其中levels
类按照中描述的顺序指定OP的帖子,然后我们order
向量'v1','v3'并使用该数字索引来排序原始向量('x')。
lapply(lst, function(x) {v1 <- as.numeric(gsub("\\D+", "", x))
v2 <- gsub(".*\\d+_|_.*", "", x)
v3 <- factor(v2, levels = c("au", "wi", "sp", "su"))
x[order(v1, v3)]
})
#$y
#[1] "/data/y_11_au_fg.txt"
#[2] "/data/y_11_wi_fg.txt"
#[3] "/data/y_11_sp_fg.txt"
#[4] "/data/y_11_su_fg.txt"
#[5] "/data/y_12_au_fg.txt"
#[6] "/data/y_12_wi_fg.txt"
#[7] "/data/y_12_sp_fg.txt"
#[8] "/data/y_12_su_fg.txt"
lst <- structure(list(y = c("/data/y_11_au_fg.txt", "/data/y_11_sp_fg.txt",
"/data/y_11_su_fg.txt", "/data/y_11_wi_fg.txt", "/data/y_12_au_fg.txt",
"/data/y_12_sp_fg.txt", "/data/y_12_su_fg.txt", "/data/y_12_wi_fg.txt"
)), .Names = "y")