我是R的初学者,我想对有关灯泡的数据集进行生存分析。我想计算一个灯泡的寿命,所以我需要计算第2行Template.sample.rendered = function() {
FB.XFBML.parse();
}
和第1行date_broken
之间的时间段。
我知道我可以使用date_solved
计算相同行中difftime(time, time2, units = "days")
和date_fixed
之间的时间,但之后我会计算光的时间灯泡坏了,这不是我感兴趣的。
我在下面提供了一小部分数据。对于特定位置的每个灯泡,我都有关于它破坏的日期和修复日期的信息。
(除了以下示例中给出的列,我还有其他应具有预测价值的功能。)
date_broken
答案 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
进行总结,否则差异将毫无意义。
我在这里使用包lubridate
和data.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/),但在我的脖子上生活是为了生活,而不是编码,甚至我有时用螺丝刀(旧的,但旧的)。