在R中按值对键值列表进行排序

8
给定一个包含动物的列表,称为m。
$bob
[1] 3

$ryan
[1] 4

$dan
[1] 1

我该如何按照数字值对此进行排序? 基本上,我希望看到我的代码像这样

m=sort(m,sortbynumber)


$ryan
[1] 4

$bob
[1] 3

$dan
[1] 1

很不幸,我无法理解这个问题。看起来应该有一个简单的解决方案。


顺便说一句,原子向量也可以有名称。 - Matthew Plourde
4
是的,如果列表中的每个元素都是单个值,那么像Matthew建议的那样将它们存储在一个普通向量中可能是有意义的。 mm <- unlist(m); sort(m,decreasing=TRUE) - Frank
2个回答

11

您可以尝试order

m[order(-unlist(m))]
#$ryan
#[1] 4

#$bob
#[1] 3

#$dan
#[1] 1

或者稍微更有效的选项是使用order函数的decreasing=TRUE参数(来自@nicola的评论)

m[order(unlist(m), decreasing=TRUE)]

3
我想 order(unlist(m),decreasing=TRUE) 可能会稍微更有效率。 - nicola
当然,大师们会在10秒钟内提供解决方案。谢谢。 - Eigenvalue
只是好奇,当您取消列表时,我会以表格格式获得三个元素。如果我查看unlist(m)[1],我会得到第一个元素,依此类推。我如何深入了解。我的意思是提取特定的第一个元素的第一个字段或第一个字段的第二个元素。 - Eigenvalue
1
这不是表格,而是一个命名向量。例如,请参见:http://www.r-tutor.com/r-introduction/vector/named-vector-members 您可以使用names函数提取名称。尝试 names(unlist(m)) - nicola
如何获取数值? - Eigenvalue
只需使用unname(unlist(m)) - akrun

1
这是优化后的解决方案。
library(hashmap)

a1<-hashmap("hello",1)
a1$insert("hello1",4)
a1$insert("hello2",2)
a1$insert("hello3",3)


sort(a1$data(),decreasing = TRUE)

#输出

hello1 hello3 hello2  hello 
   4      3      2      1 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接