r - 计算某个值已出现次数的函数/指令

标签 r matlab programming-languages dsl instructions

我正在尝试确定 MATLAB 或 R 是否具有类似于以下内容的函数。

假设我有一个输入向量 v

v = [1, 3, 1, 2, 4, 2, 1, 3]

我想生成一个向量,w,其长度与 v 相同。每个元素 w[i] 应该告诉我以下内容:对于相应的值 v[i],到目前为止该值在 v 中遇到了多少次,即在 v 的所有元素中,直到但不包括位置 i。在这个例子中

w = [0, 0, 1, 0, 0, 1, 2, 1]

我真的很想看看是否有任何统计或特定领域的语言具有这样的函数/指令,以及它可能被称为什么。

最佳答案

R 中,你可以试试这个:

 v <- c(1,3,1,2,4,2,1,3)
 ave(v, v, FUN=seq_along)-1
 #[1] 0 0 1 0 0 1 2 1

说明

 ave(seq_along(v), v, FUN=seq_along)  #It may be better to use `seq_along(v)` considering different classes i.e. `factor` also.
 #[1] 1 1 2 1 1 2 3 2

在这里,我们通过 v 对元素序列进行分组。对于匹配同一组的元素,seq_along 函数将创建 1,2,3 etc。在 v 的情况下,同一组 1 的元素位于位置 1,3,7,因此那些对应的位置将是 1,2,3。通过用 1 减去,我们将能够从 0 开始。

为了更好地理解它,

 lst1 <- split(v,v)
 lst2 <- lapply(lst1, seq_along)
 unsplit(lst2, v)
 #[1] 1 1 2 1 1 2 3 2

使用data.table

  library(data.table)
  DT <- data.table(v, ind=seq_along(v))
  DT[, n:=(1:.N)-1, by=v][,n[ind]]
  #[1] 0 0 1 0 0 1 2 1

关于r - 计算某个值已出现次数的函数/指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25401035/

相关文章:

r - 雅虎代码、时区和合并

R:如何在两个列表上运行函数?

regex - 从 R 中的字符串中精确匹配和计算单词的频率

r - 在 R 中确定和设置 POSIXct、POSIXlt、strptime 等中的时区

programming-languages - try/catch/finally 语法的起源

c++ - 编程语言理念 : Avoiding vtable lookups

c# - Matlab MCR 是否支持多核?

matlab - 获取到点集的最小坐标距离矩阵

python - 大矩阵的 SciPy 插值

compiler-construction - 如何推断强制?