我正在为客户做一个项目,他们想在Excel中完成他们的图表。
我需要做的一个图表是累积风险,这是我在Survival:: Survival中得到的,
我的问题是excel不能做逐步图表,所以我需要转换数据,所以每个时间点出现两次;一次是先前的累积危险度,一次是该时间点的累积危险度。
这是相对容易的,但恼人和耗时,在Excel中做到这一点-有没有一个聪明的方法在R中做到这一点?
我是一个相对较新的r用户,我还没有找到一种方法来做我想做的事情。
我已经试着在下面展示我得到的和我想要的:
#Load survival package"
library(survival)
#Create survfit object
Survival_Function <- survfit(Surv(lung$time,
lung$status == 2)~1)
#extract cumulative hazards
cumhaz <- data.frame(Survival_Function$time, Survival_Function$cumhaz)
head(cumhaz)
给出以下内容:
Survival_Function.time Survival_Function.cumhaz
1 5 0.004385965
2 11 0.017601824
3 12 0.022066110
4 13 0.031034720
5 15 0.035559606
6 26 0.040105061
但是为了使excel正确地制作图表,我需要它看起来像这样:
Survival_Function.time Survival_Function.cumhaz
1 5 0.004385965
2 11 0.004385965
3 11 0.017601824
4 12 0.017601824
5 12 0.022066110
6 13 0.022066110
7 13 0.031034720
8 15 0.031034720
9 15 0.035559606
10 26 0.035559606
11 26 0.040105061
根据您的代码,一个简单的方法是重复列,每个元素重复两次。从这里,您可以从time
列中删除第一个元素,从cumhaz
列中删除最后一个元素,然后合并。这段代码的一个例子是:
x <- data.frame(
Time = c(1,2,3,4,5),
Hazard = c(6,7,8,9,10)
)
data.frame(
Time = rep(x$Time, each = 2)[-1], #Repeats the time, removing the first to give you the desired formatting
Hazard = rep(x$Hazard, each = 2)[-length(rep(x$Hazard, each = 2))] # By removing the last element is means that they have the same length
)
,这给了你想要的输出。
注意:如果你有大量的列,这将是麻烦的,但只有两个左右,这应该是好的。