如何计算行值的总和(任期计算)

时间:2016-02-01 06:57:52

标签: r

这是我的数据集的一部分:

ID  year  mrg_status 
 1  1990           2
 1  1991           1
 1  1992           1
 1  1993           4
 2  1990           2
 2  1991           2
 2  1992           1
 3  1991           2
 3  1992           1
 3  1995           1
 ...

mrg_status中,2表示“单身”1表示“已婚”,4表示“离婚”。我想要做的是为每个ID计算marriage_tenure并添加第四列来记录它。结果应如下所示:

ID  year  mrg_status mrg_tenure
 1  1990           2          0
 1  1991           1          1
 1  1992           1          2
 1  1993           4          2
 2  1990           2          0
 2  1991           2          0
 2  1992           1          1
 3  1991           2          0
 3  1992           1          1
 3  1995           1          4

我试过了:

 if(dt$mrg_status ==1){dt$mrg_tenure = sum(dt$mrg_status,by="ID"}

但这似乎完全是一团糟。一个重要的问题是如何处理mrg_status = 4,它与前一年mrg_tenure = 1的mrg_status相同。我正在考虑编写一个循环,它可以检测“4”并停止累加mrg_tenure

1 个答案:

答案 0 :(得分:1)

这就是我做的事情

df <- data.frame(
    ID = c(1, 1, 1, 1, 2, 2, 2, 3, 3, 3),
    year= c(1990, 1991, 1992, 1993, 1990, 1991, 1992, 1991, 1992, 1995),
    mrg_status = c(2, 1, 1, 4, 2, 2, 1, 2, 1, 1)
)

mrg_tenure <- sapply(
    X = split(df, df$ID), FUN = function(df1){
        ifelse(
            test = (df1$mrg_status == 2),
            yes = 0,
            no = ifelse(
                test = (df1$mrg_status == 1),
                yes = df1$year - max(df1[df1$mrg_status == 2, c('year')]),
                no = max(df1[df1$mrg_status == 1, c('year')]) - max(df1[df1$mrg_status == 2, c('year')])
            )
        )
    }
)

df$mrg_tenure <- do.call(c, mrg_tenure)

# ID year mrg_status mrg_tenure
# 1   1 1990          2          0
# 2   1 1991          1          1
# 3   1 1992          1          2
# 4   1 1993          4          2
# 5   2 1990          2          0
# 6   2 1991          2          0
# 7   2 1992          1          1
# 8   3 1991          2          0
# 9   3 1992          1          1
# 10  3 1995          1          4
  • 按ID拆分
  • 如果状态== 2,则为每个ID设置tenure = 0
  • 如果status == 1则将当前年份减去人员为单身的年份
  • 其他状态== 4,因此人离婚,在人结婚时的最后任期设定任期