Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 从日期制作用于生存分析的删失变量_R_Survival Analysis - Fatal编程技术网

R 从日期制作用于生存分析的删失变量

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之间的时间,但是我会计算灯泡损坏的时间,这不是我感兴趣的 我在下面提供了我的数据的一个小样本。对于某个特定位置的每个灯泡,我都有关于灯泡损坏日期和修复日期的信息 (除了下面示例中给

我是R的初学者,我想对我拥有的灯泡数据集进行生存分析。我想计算灯泡的寿命,因此我需要计算第2行中的
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) 
}