2

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

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 年以来的年份”,并且可以相应地重新命名专栏。

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

4

2 回答 2

4

这是一个基本的 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
于 2018-03-18T22:51:18.277 回答
1

这是一个使用max.colwith的选项rowSums

df1$died <- max.col(!df1[-1], "first") * NA^!rowSums(!df1[-1])
df1$died
#[1]  4 NA  3  2
于 2018-03-19T03:40:36.833 回答