计算向量中连续对的数量

时间:2015-06-01 18:05:14

标签: r split count categories

假设我有以下向量:

    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)次观察。

4 个答案:

答案 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