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不太明白。你能举个例子吗?我已经在VmaybeV@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