我正在尝试确定 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/