R:平均周期长度

时间:2014-04-13 10:22:40

标签: r

这是样本数据:

x1       x2
3.2      3.2
NA       3.2
NA       3.2
4.1      4.1
NA       4.1
2.6      2.6
NA       2.6
NA       2.6  
4.1      4.1
NA       4.1
NA       4.1
NA       4.1
3.0      3.0
NA       3.0
3.0      3.0
NA       3.0
NA       3.0
NA       3.0

数据的政府意识形态构成指数从1到5(政治意义上从左到右)。样本数据中的x1是新政府的第一个月及其指数值,x2与政府执政的每个月的价值相同。我需要找出平均值(或中位数和其他统计数据)长度或政府术语。问题是索引值可能是相同的,所以我不能使用该值作为例如tapply等的索引。所以我需要将具有相同值的周期的长度优选地用于向量。有任何想法吗?

编辑:恰好是数据中有一个案例,其中两个连续的术语具有相同的值,并将其添加到示例数据的末尾。

2 个答案:

答案 0 :(得分:1)

这将完成这项工作:

term.lengths = diff(which(!is.na(c(x1,length(x1)+1))))
mean(term.lengths)
median(term.lengths)

等...

答案 1 :(得分:1)

我会使用cumsum(!is.na(x1))

df <- read.table(textConnection("
x1       x2
3.2      3.2
NA       3.2
NA       3.2
4.1      4.1
NA       4.1
2.6      2.6
NA       2.6
NA       2.6
4.1      4.1
NA       4.1
NA       4.1
NA       4.1
3.0      3.0
NA       3.0
3.0      3.0
NA       3.0
NA       3.0
NA       3.0"), header=TRUE)

gterms <- cumsum(!is.na(df$x1))
#  [1] 1 1 1 2 2 3 3 3 4 4 4 4 5 5 6 6 6 6

tapply(df$x2, gterms, mean)
#   1   2   3   4   5   6 
# 3.2 4.1 2.6 4.1 3.0 3.0