如何识别一组有序列中的第一个零?

How do I identifying the first zero in a group of ordered columns?

我正在尝试格式化数据集以用于某些生存分析模型。每行是一所学校,随时间变化的列是该校当年的注册学生总数。假设数据框看起来像这样(也有时间不变的列)。

Name   total.89   total.90   total.91   total.92 
a         8          6         4           0
b         1          2         4           9
c         7          9         0           0
d         2          0         0           0

我想创建一个新列来指示学校 "died,",即出现零的第一列。最后,我希望此列成为 "years since 1989" 并可以相应地重新命名列。

这个问题的一个更一般的版本,对于一系列按时间排序的列,我如何识别给定值出现的第一列?

这是获取第一个零列 (x = 0) 或 NA 如果没有第一个零的列的基本 R 方法:

data$died <- apply(data[, -1], 1, match, x = 0)
data
#   Name total.89 total.90 total.91 total.92 died
# 1    a        8        6        4        0    4
# 2    b        1        2        4        9   NA
# 3    c        7        9        0        0    3
# 4    d        2        0        0        0    2

这是一个使用 max.colrowSums

的选项
df1$died <- max.col(!df1[-1], "first") * NA^!rowSums(!df1[-1])
df1$died
#[1]  4 NA  3  2