R 从日期制作用于生存分析的删失变量
我是R的初学者,我想对我拥有的灯泡数据集进行生存分析。我想计算灯泡的寿命,因此我需要计算第2行中的R 从日期制作用于生存分析的删失变量,r,survival-analysis,R,Survival Analysis,我是R的初学者,我想对我拥有的灯泡数据集进行生存分析。我想计算灯泡的寿命,因此我需要计算第2行中的date\u break和第1行中的date\u solved之间的时间段 我知道我可以使用difftime(time,time2,units=“days”)来计算同一行中date\u fixed和date\u break之间的时间,但是我会计算灯泡损坏的时间,这不是我感兴趣的 我在下面提供了我的数据的一个小样本。对于某个特定位置的每个灯泡,我都有关于灯泡损坏日期和修复日期的信息 (除了下面示例中给
date\u break
和第1行中的date\u solved
之间的时间段
我知道我可以使用difftime(time,time2,units=“days”)
来计算同一行中date\u fixed
和date\u break
之间的时间,但是我会计算灯泡损坏的时间,这不是我感兴趣的
我在下面提供了我的数据的一个小样本。对于某个特定位置的每个灯泡,我都有关于灯泡损坏日期和修复日期的信息
(除了下面示例中给出的列之外,我还有其他应该具有预测价值的功能。)
#日期(损坏日期)固定灯泡位置
#1 26-2-2015 17-3-2015 1A
#2 19-3-2015 26-3-2015 1A
#3 26-3-2015 26-3-2015 1A
#417-4-2015 29-4-2015 2 B
#5 19-6-2015 25-6-2015 2 B
#6 9-7-2015 30-7-2015 2 B
ds这应该有帮助
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"))
库(dplyr)
ds2%
组别(灯泡)%>%
突变(tp=as.Date(日期已中断,“%d-%m-%Y”)-
截止日期(延迟(日期固定,1),%d-%m-%Y)
这应该会有所帮助
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"))
库(dplyr)
ds2%
组别(灯泡)%>%
突变(tp=as.Date(日期已中断,“%d-%m-%Y”)-
截止日期(延迟(日期固定,1),%d-%m-%Y)
首先,您需要按照@Gaurav的建议确定日期。然后,您需要通过灯泡来总结,否则差异将毫无意义。
我在这里介绍了一种使用软件包lubridate
和数据的替代方案。表
:
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
对于未来的机会,当你产生一些预期的结果以及你的问题时,会有很大的帮助。首先,你需要按照@Gaurav的建议确定你的日期。然后,您需要通过灯泡来总结,否则差异将毫无意义。
我在这里介绍了一种使用软件包lubridate
和数据的替代方案。表
:
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
对于未来的机会,当你产生一些预期的结果以及你的问题时,这会有很大的帮助。我真的很喜欢R中那些令人印象深刻的管道操作员。他们非常优雅,如果有人有现成的解决方案,那就太棒了
我主要做循环,可能是因为我喜欢看到发生的事情,并且可以一边调试。(几十年前我也是在基础教育上长大的——但不要告诉任何人。)
无论如何,这是我的方法,非常类似于我正在做的事情,希望有一点附加值使用序列计数器。这可能是一个有用的回归变量(协变量或分层),或者您可以通过它来子集,假设您可能希望将以后的失败与以前的失败分开来看。序列计数器的存活曲线在我的工作中是非常有用的
首先转换日期
## 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$date_breaked我真的很喜欢R区那些令人印象深刻的管道操作员。他们非常优雅,如果有人有现成的解决方案,那就太棒了
我主要做循环,可能是因为我喜欢看到发生的事情,并且可以一边调试。(几十年前我也是在基础教育上长大的——但不要告诉任何人。)
无论如何,这是我的方法,非常类似于我正在做的事情,希望有一点附加值使用序列计数器。这可能是一个有用的回归变量(协变量或分层),或者您可以通过它来子集,假设您可能希望将以后的失败与以前的失败分开来看。序列计数器的存活曲线在我的工作中是非常有用的
首先转换日期
## 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$date_从理论上讲,这应该是可行的,但它会有一个日期的问题,因为它们目前的格式。默认日期格式为yyyy-mm-dd,因此“26-2-2015”将被读取为0026年2月20日。尝试将参数“%d-%m-%y”添加到上述答案中的as.Date函数中,使其与格式化的日期一起工作。而不是“%d-%m-%y”
。使用“%d-%m-%Y”
这在理论上应该是可行的,但在当前格式化日期时会出现问题。默认日期格式为yyyy-mm-dd,因此“26-2-2015”将被读取为0026年2月20日。尝试将参数“%d-%m-%y”添加到上述答案中的as.Date函数中,使其与格式化的日期一起工作。而不是“%d-%m-%y”
。使用“%d-%m-%Y”
谢谢你的提示,我下次会这么做!如果任何一个答案都解决了你的问题,你可以考虑把它标记为被接受的答案,点击答案的VoTIN感谢点击提示,我下次会这样做!如果任何一个答案都解决了你的问题,你可以考虑在答案的投票下点击复选标记来标记它为被接受的答案。
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
for (rdx in 2:nrow(ds)) {
## if same item, difference is current failure date minus previous in-service date
ifelse(ds$seq[rdx] != 1, ds$diff[rdx] <- ds$date_broken[rdx] - ds$date_fixed[rdx-1], NA)
}