假设我有以下向量:
V<-c(-1,-1,-1,-1,-1,-1,-1,-1,1,1)
我想计算以下类别中的CONSECUTIVE对的数量:
(1,1), (-1,1), (1,-1), and (-1,-1).
在我的示例中,连续七对(-1,-1)
,一对(-1,1)
和一对(1,1)
。
我正在尝试使用拆分功能解决这个问题,但我无法弄清楚正确的因素。
这个想法是将第一次观察与第二次观察配对。第二次和第三次等等。最后一对应该是第n次观察的第(n-1)次观察。
答案 0 :(得分:11)
所有连续的对都可以用两个平行向量表示,省略最后一次或第一次观察
> 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
或略有不同的形式
Template.singleComment.helpers({
momentTime: function () {
return moment(this.createdAt).fromNow();
},
byWho: function(){
if(Meteor.users.findOne({_id: user}).username){
return this.username;
} else {
return "none"
}
}
答案 1 :(得分:9)
也许是那样的
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评论,没有paste
table(head(V, -1), tail(V, -1))
# -1 1
# -1 7 1
# 1 0 1
或者
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
答案 2 :(得分:7)
使用 data.table :
List<B>
答案 3 :(得分:2)
在基础R中,将对的右半部分添加到差异中以创建分数:
V<-c(-1,-1,-1,-1,-1,-1,-1,-1,1,1)
table(diff(V) + V[-1])
#-1 1 3
# 7 1 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