首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何根据元素的属性对R中的列表排序

如何根据元素的属性对R中的列表排序
EN

Stack Overflow用户
提问于 2020-08-25 07:48:10
回答 1查看 115关注 0票数 0

我在R中有一个栅格列表,每个元素对于names属性都有不同的值。例如,当我执行(names(dems[[3]]))时,结果是"srtm_sig0.9_iter100_viter50_nb_cv0"。当我做(names(dems[[4]]))时,结果是‘srtm_sig0.9_iter20_viter50_nb_cv0’。

现在我要做的是根据name属性的子字符串对列表进行排序。特别是*sig0.9_****_iter20*之间的部分。因此,对于这两个例子,它将是iter100iter20

要模拟该列表,可以使用以下内容:

代码语言:javascript
运行
复制
dems = vector("list", length = 5)
iters = seq(20, 100, 20)
for(i in seq_along(iters)){
  dems[[i]] = paste0("xxxxxsig0.9_iter", iters[[i]], "_nbxxx")
}
set.seed(1)
dems = sample(dems)
EN

回答 1

Stack Overflow用户

发布于 2020-08-25 09:13:03

您可以使用"iter"使用sub提取数字,将其转换为数字,并将其转换为order

代码语言:javascript
运行
复制
dems[order(as.numeric(sub('.*iter(\\d+).*', '\\1', unlist(dems))))]

#[[1]]
#[1] "xxxxxsig0.9_iter20_nbxxx"

#[[2]]
#[1] "xxxxxsig0.9_iter40_nbxxx"

#[[3]]
#[1] "xxxxxsig0.9_iter60_nbxxx"

#[[4]]
#[1] "xxxxxsig0.9_iter80_nbxxx"

#[[5]]
#[1] "xxxxxsig0.9_iter100_nbxxx"

或者直接使用gtools::mixedorder/mixedsort执行此操作:

代码语言:javascript
运行
复制
dems[gtools::mixedorder(unlist(dems))]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63574272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档