计算向量中连续对的数量

ju.*_*yom 4 split r count categories

假设我有以下向量:

    V<-c(-1,-1,-1,-1,-1,-1,-1,-1,1,1) 
Run Code Online (Sandbox Code Playgroud)

我想计算以下类别中的CONSECUTIVE对的数量:

    (1,1), (-1,1), (1,-1), and (-1,-1).
Run Code Online (Sandbox Code Playgroud)

在我的例子中,有七对连续(-1,-1),一对(-1,1)和一对(1,1).

我试图使用split函数解决这个问题,但我无法弄清楚正确的因素.

这个想法是将第一次观察与第二次观察配对.第二次和第三次等等.最后一对应该是第n次观察的第(n-1)次观察.

Mar*_*gan 11

所有连续对可以由两个平行向量表示,省略最后一个或第一个观察

x <- V[-length(V)]
y <- V[-1]
Run Code Online (Sandbox Code Playgroud)

然后交叉制表这些

> xtabs(~ x + y)
    y
x    -1 1
  -1  7 1
  1   0 1
Run Code Online (Sandbox Code Playgroud)

或略有不同的形式

> as.data.frame(xtabs(~x+y))
   x  y Freq
1 -1 -1    7
2  1 -1    0
3 -1  1    1
4  1  1    1
Run Code Online (Sandbox Code Playgroud)


Dav*_*urg 9

也许是这样的

library(zoo)
table(rollapply(V, 2, toString))
# -1, -1  -1, 1   1, 1 
#      7      1      1 
Run Code Online (Sandbox Code Playgroud)

或者用基础R

table(paste(head(V, -1), tail(V, -1)))
# -1 -1  -1 1   1 1 
#     7     1     1 
Run Code Online (Sandbox Code Playgroud)

或者根据@akruns评论,没有 paste

table(head(V, -1), tail(V, -1))
#    -1 1
# -1  7 1
#  1  0 1
Run Code Online (Sandbox Code Playgroud)

要么

as.data.frame(table(head(V, -1), tail(V, -1)))
#   Var1 Var2 Freq
# 1   -1   -1    7
# 2    1   -1    0
# 3   -1    1    1
# 4    1    1    1
Run Code Online (Sandbox Code Playgroud)

  • 删除粘贴选项会给交叉制表`表(头(V,-1),尾(V,-1))` (2认同)

Jos*_*ien 7

使用data.table:

library(data.table)
dt <- rev(data.table(embed(V,2)))
dt[,.N, by=names(dt)]
#    V2 V1 N
# 1: -1 -1 7
# 2: -1  1 1
# 3:  1  1 1
Run Code Online (Sandbox Code Playgroud)