这是样本数据:
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等的索引。所以我需要将具有相同值的周期的长度优选地用于向量。有任何想法吗?
编辑:恰好是数据中有一个案例,其中两个连续的术语具有相同的值,并将其添加到示例数据的末尾。
答案 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