gpt4 book ai didi

r - R中获取向量中元素频率向量的最简单方法

转载 作者:行者123 更新时间:2023-12-01 12:35:28 32 4
gpt4 key购买 nike

假设我有一个值向量 v。获得长度等于 v 的向量 f 的最简单方法是什么,其中 f 的第 i 个元素是 v 在 v 中的第 i 个元素的频率?

我知道的唯一方法似乎不必要地复杂:

v = sample(1:10,100,replace=TRUE)
D = data.frame( idx=1:length(v), v=v )
E = merge( D, data.frame(table(v)) )
E = E[ with(E,order(idx)), ]
f = E$Freq

按照“频率(v)”的思路,肯定有一种更简单的方法可以做到这一点?

最佳答案

对于小正整数向量 v ,如在问题中,表达式

tabulate(v)[v]

特别简单,而且速度很快。

对于更一般的数值向量 v你可以说服 ecdf帮助你,如
w <- sapply(v, ecdf(v)) * length(v)
tabulate(w)[w]

不过,自己对底层算法进行编码可能会更好——而且它肯定避免了前面解决方案中隐含的浮点舍入错误:
frequencies <- function(x) {
i <- order(x)
v <- x[i]
w <- cumsum(c(TRUE, v[-1] != v[-length(x)]))
f <- tabulate(w)[w]
return(f[order(i)])
}

该算法对数据进行排序,在遇到这些值时为其分配顺序标识符 1、2、3...(通过对值发生变化的二进制指示符求和),使用前面的 tabulate()[]有效获取频率的技巧,然后对结果进行排序,使输出与输入匹配,逐个组件。

关于r - R中获取向量中元素频率向量的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30353392/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com