r - 通过根据数据框中的数字添加行和值来扩展数据框

标签 r dplyr tidyverse purrr survival-analysis

我有人口级别的事件数据,即每天都有发生事件的个人和被审查的个人的总和。我想将此数据扩展为更传统的生存分析格式,即每个人得到一行。因此,对于每一天,需要为事件数(事件数 = 1 和审查员 = 0)和审查员数(事件数 = 0 和审查员 = 1)添加一些行。以下是输入数据框 (dataIn) 和所需输出的示例。

days <- c(1,2,3)
event <- c(2,2,0)
censor <- c(0,2,2)
dataIn <- data.frame(days, event, censor)

  days event censor
    1     2      0
    2     2      2
    3     0      2

  days event censor
    1     1      0
    1     1      0
    2     1      0
    2     1      0
    2     0      1
    2     0      1
    3     0      1
    3     0      1

最佳答案

下面是使用 rep 的一种相当简单但有效的方法:

with(dataIn, data.frame(day    = c(rep(days, event), rep(days, censor)), 
                        event  = rep(c(1, 0), c(sum(event), sum(censor))),
                        censor = rep(c(0, 1), c(sum(event), sum(censor)))))
#>   day event censor
#> 1   1     1      0
#> 2   1     1      0
#> 3   2     1      0
#> 4   2     1      0
#> 5   2     0      1
#> 6   2     0      1
#> 7   3     0      1
#> 8   3     0      1

关于r - 通过根据数据框中的数字添加行和值来扩展数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71512841/

相关文章:

r - 如何在 dplyr::mutate() 的 RHS 上使用动态变量?

c - 使用 dyn.load 在 R x64 中加载已编译的 c 代码的问题

r - 使用带有计数的数据来添加零和 NA

r - 使用 r 中列中的逗号分隔值转换数据框

r - 在 R 中按顺序标记句子?

r - 在 dplyr 序列中使用 data.frame 返回函数

r - 使用 lm 在列表列中使用 purrr 预测新值

r - dplyr 根据订单条件和 if 语句进行汇总

datetime - 从频率 = 23 的不规则 (as.Date) 时间序列创建规则时间序列

r - 当你的数据有多个 "key"变量时,如何使用 spread() ?