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)
也许是这样的
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)
使用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)