R 计算向量中连续对的数量

R 计算向量中连续对的数量,r,split,count,categories,R,Split,Count,Categories,假设我有以下向量: V<-c(-1,-1,-1,-1,-1,-1,-1,-1,1,1) 在我的示例中,有七对连续的(-1,-1),一对(-1,1),一对(1,1) 我试图用split函数来解决这个问题,但是我还不能找出正确的因子 我们的想法是将第一个观测值与第二个观测值配对。第二个是第三个,依此类推。最后一对应该是第(n-1)个观测值和第n个观测值。可能是这样的 library(zoo) table(rollapply(V, 2, toString)) # -1, -1 -1

假设我有以下向量:

    V<-c(-1,-1,-1,-1,-1,-1,-1,-1,1,1) 
在我的示例中,有七对连续的
(-1,-1)
,一对
(-1,1)
,一对
(1,1)

我试图用split函数来解决这个问题,但是我还不能找出正确的因子


我们的想法是将第一个观测值与第二个观测值配对。第二个是第三个,依此类推。最后一对应该是第(n-1)个观测值和第n个观测值。

可能是这样的

library(zoo)
table(rollapply(V, 2, toString))
# -1, -1  -1, 1   1, 1 
#      7      1      1 
还是用R基

table(paste(head(V, -1), tail(V, -1)))
# -1 -1  -1 1   1 1 
#     7     1     1 
或根据@akruns注释,不粘贴

table(head(V, -1), tail(V, -1))
#    -1 1
# -1  7 1
#  1  0 1


带有数据。表

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
库(data.table)

dt在基数R中,将配对的右半部分加到差值中,以创建分数:

V<-c(-1,-1,-1,-1,-1,-1,-1,-1,1,1)
table(diff(V) + V[-1])    
#-1  1  3 
# 7  1  1 

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

x <- V[-length(V)]
y <- V[-1]
或者以稍微不同的形式

> 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

不完全相同,可能是的副本?我们可以认为向量中的可能值永远不会超过两个吗?是的,我的向量只有1和-1。我认为这里强调“连续”是令人困惑的,因为听起来像是在谈论“运行”。例如,
?rle
了解我所说的术语。不太清楚:第一种方法似乎适用于输入中的N个不同值,但第二种可能不适用。你能查一下吗?@CarlWitthoft不太明白。你能举个例子吗?我已经在
Vmaybe
V@CarlWitthoft上进行了测试,它对你的向量很有效。我想您会感到困惑,因为
toString
添加了一个逗号,而
paste
没有删除粘贴选项将给出交叉表
表(头(V,-1),尾(V,-1))
(-1,-1) => (-1) - (-1) + (-1) = -1
(-1, 1) => ( 1) - (-1) +  (1) =  3
( 1,-1) => (-1) -  (1) + (-1) = -3
( 1, 1) => ( 1) -  (1) +  (1) =  1
x <- V[-length(V)]
y <- V[-1]
> xtabs(~ x + y)
    y
x    -1 1
  -1  7 1
  1   0 1
> 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