按频率和进入顺序重新排序向量

Posted

技术标签:

【中文标题】按频率和进入顺序重新排序向量【英文标题】:Reordering vectors by frequency and order of entry 【发布时间】:2021-12-31 01:23:54 【问题描述】:

如何按频率和进入顺序对 R 中的以下向量重新排序?例如:

Z1 <- c(1,1,1,2,2) # c(1,1,1,2,2)
Z2 <- c(2,2,2,1,1) # c(1,1,1,2,2)
Z3 <- c(2,3,5,5,4) # c(2,3,1,1,4)
Z4 <- c(2,4,5,5,3) # c(2,3,1,1,4)

我尝试使用rank() 函数按如下顺序排序,但我不知道如何再次按频率排序。有什么想法吗?

as.numeric(factor(rank(Z1))) # c(1,1,1,2,2)
as.numeric(factor(rank(Z2))) # c(2,2,2,1,1)
as.numeric(factor(rank(Z3))) # c(1,2,4,4,3)
as.numeric(factor(rank(Z4))) # c(1,3,4,4,2)

【问题讨论】:

【参考方案1】:

我们可以使用来自forcatsfct_infreqfct_inorder

> library(forcats)
> as.integer(fct_infreq(fct_inorder(as.character(Z4))))
[1] 2 3 1 1 4
> as.integer(fct_infreq(fct_inorder(as.character(Z3))))
[1] 2 3 1 1 4
> as.integer(fct_infreq(fct_inorder(as.character(Z2))))
[1] 1 1 1 2 2
> as.integer(fct_infreq(fct_inorder(as.character(Z1))))
[1] 1 1 1 2 2

【讨论】:

以上是关于按频率和进入顺序重新排序向量的主要内容,如果未能解决你的问题,请参考以下文章

首先按频率对字符串中的字符进行排序,然后按字母顺序排序

使用 Linq 按名称频率对列表进行排序

按频率排序列表

算法按频率高低来进行排序

在结构中按频率对数组中的字母进行排序

6.2排序式检索 词项频率