R:如何计算长度条件下纵向数据库中连续出现的次数



我正在用一个关于个人的纵向数据库研究R,每个ID有几行(在数据库中命名为vn(,列中有他们的属性。我的变量observation表示观察的每一年,maritalstatus表示该人是否已婚10

以下是我的数据库中一个人的概述:

structure(list(vn = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), maritalstatus = c(0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1), observation = c(2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018)), class = "data.frame")

我正在寻找一种方法来创建一个新的变量,该变量只在第一次连续出现的次数长度大于或等于5时计数。例如:

marital_length = c (0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0)

我当前的代码(如下(创建了一个变量,用于计算连续数字的最大长度,但我没有找到添加条件的方法,只计算第一次长度为>= 5时的长度。


maritalstatus_consecutive <- tapply(test$maritalstatus, INDEX = test$vn, most_consecutive_val)```
test$marital_length <- maritalstatus_consecutive[test$vn]

我也尝试使用min()(而不是max(,但例如,如果一个人结婚2年,离婚,然后结婚6年,如果我不添加条件>=5,我将无法在这个新变量中看到她结婚6年。

有人有一个可以帮助我的代码的想法吗?

我不完全确定您的预期输出试图表示什么。如果你只想要第一次婚姻的长度>每个vn可以使用 5年

tapply(df$maritalstatus, df$vn, function(x) with(rle(x), lengths[lengths >= 5][1]) )

也许这太容易了,但似乎有效:

df$marital_length <- with(df, ave(maritalstatus, vn, FUN = function(x) 
with(rle(x), rep(as.integer(seq_along(lengths) == 
which.max(lengths >= 5)) * lengths, lengths))))

df$marital_length
#[1] 0 0 0 0 0 0 5 5 5 5 5 0 0 0 0 0 0 0 0

当长度大于5时,CCD_ 11首次给出索引。

相关内容

  • 没有找到相关文章

最新更新