Как определить первый ноль в группе упорядоченных столбцов?

Я пытаюсь отформатировать набор данных для использования в некоторых моделях анализа выживания. Каждая строка — это школа, а меняющиеся во времени столбцы — это общее количество учащихся, зачисленных в школу в этом году. Скажем, кадр данных выглядит так (также есть столбцы, не зависящие от времени).

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

Я хотел бы создать новый столбец, указывающий, когда школа «умерла», то есть первый столбец, в котором появляется ноль. В конечном счете, я хотел бы, чтобы этот столбец был «годы с 1989 года» и мог бы соответствующим образом переименовать столбцы.

Более общая версия вопроса: для ряда столбцов, упорядоченных по времени, как определить первый столбец, в котором встречается данное значение?


person Ryan Parsons    schedule 18.03.2018    source источник


Ответы (2)


Вот базовый подход R для получения столбца с первым нулем (x = 0) или NA, если его нет:

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
person Julius Vainora    schedule 18.03.2018

Вот вариант использования max.col с rowSums

df1$died <- max.col(!df1[-1], "first") * NA^!rowSums(!df1[-1])
df1$died
#[1]  4 NA  3  2
person akrun    schedule 19.03.2018