我们说我在R中有一个列表:
MyList <- list(A = rnorm(5), B = seq(10), C = letters)
现在让我们说我也有一个与MyList
的名字相匹配的矢量,但它们的顺序不同:
pattern <- c("B", "A", "C")
如何对MyList
进行排序以匹配pattern
中的顺序?结果应如下所示,但仍保留原始名称。
NewList <- list(MyList[["B"]], MyList[["A"]], MyList[["C"]])
如果pattern
具有自然顺序(例如,升序或降序),这似乎很简单。但是,如果它没有,那么我不能使用sort
或order
?
我理想的解决方案只使用基础R。
答案 0 :(得分:0)
查看?"["
可能会有所帮助。具体来说,[[
和[
之间的差异让我困惑了一段时间。在这里,需要注意的关键是您可以使用[
为多个元素进行子集,而[[
只能用于一个元素。
正如@lmo指出的那样,你想要做的是MyList[pattern]
。如果您没有意识到,这可以起作用,因为names(MyList)
与pattern
中的元素匹配 - 您不仅可以通过数字索引索引/子集(例如,1:3
),但也通过名称(例如,c("A","B","C")
)。
TLDR:
NewList <- MyList[pattern]