根据日期对受影响的分析制作审查变量

时间:2016-04-26 17:26:45

标签: r survival-analysis

我是R的初学者,我想对有关灯泡的数据集进行生存分析。我想计算一个灯泡的寿命,所以我需要计算第2行Template.sample.rendered = function() { FB.XFBML.parse(); } 和第1行date_broken之间的时间段。

我知道我可以使用date_solved计算相同行中difftime(time, time2, units = "days")date_fixed之间的时间,但之后我会计算光的时间灯泡坏了,这不是我感兴趣的。

我在下面提供了一小部分数据。对于特定位置的每个灯泡,我都有关于它破坏的日期和修复日期的信息。

(除了以下示例中给出的列,我还有其他应具有预测价值的功能。)

date_broken

3 个答案:

答案 0 :(得分:1)

这应该有帮助

library(dplyr)
ds2 <- ds %>% 
    group_by(lightbulb) %>%
    mutate(tp = as.Date(date_broken, "%d-%m-%Y") - 
                  as.Date(lag(date_fixed,1), "%d-%m-%Y"))

答案 1 :(得分:1)

首先,您需要修复日期,正如@Gaurav建议的那样。然后,您需要按lightbulb进行总结,否则差异将毫无意义。 我在这里使用包lubridatedata.table来提供替代方案:

library(lubridate)
library(data.table)
ds$date_broken <- dmy(ds$date_broken)
ds$date_fixed <- dmy(ds$date_fixed)
setDT(ds)

setDT(ds)[, dt := difftime(date_fixed, shift(date_broken, 1L, type="lag"), "days"), by = lightbulb]
ds

产生:

   ##    date_broken date_fixed lightbulb location      dt
   ## 1:  2015-02-26 2015-03-17         1        A NA days
   ## 2:  2015-03-19 2015-03-26         1        A 28 days
   ## 3:  2015-03-26 2015-03-26         1        A  7 days
   ## 4:  2015-04-17 2015-04-29         2        B NA days
   ## 5:  2015-06-19 2015-06-25         2        B 69 days
   ## 6:  2015-07-09 2015-07-30         2        B 41 days

对于未来的机会,当您产生一些预期结果以及您的问题时,它会提供很多帮助。

答案 2 :(得分:0)

我非常喜欢R中那些超级令人印象深刻的管道操作员。他们非常优雅,如果有人有一个随时可用的解决方案,那就很棒。

我主要做循环,可能&#39;因为我喜欢我看到的东西,我可以随时调试。 (几十年前我也在BASIC上长大 - 但不要告诉任何人。)

无论如何,这是我采用与我正在进行的非常类似的方法,希望使用序列计数器增加一些附加值。这可能是一个有用的回归变量(协变量或分层)或者可以通过其进行子集化的假设,假设您可能希望例如与以前的故障分开查看以后的故障。序列计数器的生存曲线在我的工作中非常有用。

首先转换日期......

export : {
                pdfMake : {
                    fonts : {
                        OpenSans : {
                            normal : 'OpenSans-Regular.ttf',
                            bold : 'OpenSans-Semibold.ttf',
                            italics : 'OpenSans-Italic.ttf',
                            bolditalics : 'OpenSans-BoldItalic.ttf'
                        }
                    }
                },
                enabled : true,
                drawing : {
                    menu : [{
                        class : 'export-drawing',
                        menu : [{
                            label : translations['ADD'] + ' ...',
                            menu : [{
                                label : translations['PDF_ANNOTATE_SHAPE']  +' ...',
                                action : 'draw.shapes'
                            }, {
                                label : translations['PDF_ANNOTATE_TEXT'],
                                action : 'text'
                            }]
                        }, {
                            label : translations['PDF_ANNOTATE_CHANGE'] + ' ...',
                            menu : [{
                                label : translations['PDF_ANNOTATE_MODE'] + ' ...',
                                action : 'draw.modes'
                            }, {
                                label : translations['PDF_ANNOTATE_COLOR'] + ' ...',
                                action : 'draw.colors'
                            }, {
                                label : translations['PDF_ANNOTATE_SIZE'] + ' ...',
                                action : 'draw.widths'
                            }, {
                                label : translations['PDF_ANNOTATE_OPACITY'] + ' ...',
                                action : 'draw.opacities'
                            }, 'UNDO', 'REDO']
                        }, {... etc}

添加序列计数器列(称为seq)以跟踪失败次数

 ## convert dates. once done it's done
 ds$date_broken <- as.Date(ds$date_broken, "%d-%m-%Y")
 ds$date_fixed <- as.Date(ds$date_fixed, "%d-%m-%Y")

填充该计数器列

ds$seq <- 1

现在添加差异列

for (rdx in 2:nrow(ds)) {
    ## if same item, increment count. If new item, start new count at seq = 1
    ifelse(ds$lightbulb[rdx] == ds$lightbulb[rdx-1], ds$seq[rdx] <- ds$seq[rdx-1]+1, 1) 
}

填充差异列

ds$diff <- NA

这对我来说很有用,无论是概念化还是实施。请注意,有些人确实有点挂了一圈(http://paleocave.sciencesortof.com/2013/03/writing-a-for-loop-in-r/),但在我的脖子上生活是为了生活,而不是编码,甚至我有时用螺丝刀(旧的,但旧的)。

相关问题