如何识别一组有序列中的第一个零?
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.col
和 rowSums
的选项
df1$died <- max.col(!df1[-1], "first") * NA^!rowSums(!df1[-1])
df1$died
#[1] 4 NA 3 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
我想创建一个新列来指示学校 "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.col
和 rowSums
df1$died <- max.col(!df1[-1], "first") * NA^!rowSums(!df1[-1])
df1$died
#[1] 4 NA 3 2