我正在尝试学习如何在R中编写函数,并且我有一个关于表的使用以及如何处理“级别变量”的非常具体的问题。
我最初的问题是编写一个累积风险函数。我的功能基本上是这样做的:
示例:x= c(1,1,2,2,2,3,14,25)
具有 8 次观察/次的数据
对于 F(14)= 2/8 + 3/6+ 1/3+ 1/2 对于 F(2)= 2/8+3/6,从向量 8 个观测值执行以下操作,依此类推。
基本上我想要总和:(有多少观察有时间 i)/(有多少观察有时间大于或等于 i)所以对于 i=2,我有两个分数:2/(8)+ 3/(6 ),因为有 6 个观测值,时间 i 等于或大于 2。
具体来说,我正在使用该功能table
。然而,这个函数给了我频率,并将与频率相关的值视为一个级别,而不是一个数字。
对于我的数据,我有 5 个级别:1、2、3、14、15,但是当我尝试执行以下操作时:
v<-c(1,2,3,14,15)
ta<-as.data.frame(table(v))
as.numeric(ta$v)<14
[1] TRUE TRUE TRUE TRUE TRUE
但是,我希望结果是 TRUE TRUE TRUE FALSE FALSE。我希望将 table() 中的变量视为数字。我怎样才能做到这一点?
只是为了看看我在做什么,我的额外代码如下。它在没有审查的情况下运作良好,但这部分是我推进审查的关键。
cumh<-function (x,t,y=rep(1,length(x))){
le<-length(x)
#Sum comparison of terms
isum<-sum(x<=t)
#Collapse table
ta<-as.data.frame((table(x)))
ta$cum<-cumsum(ta$Freq)
ta$den<-le
for (j in 1:(nrow(ta)-1)) {
ta$den[j+1]<-le-ta$cum[j]
}
ind<-isum>=ta$cum
#correction for right censor:
ta2<-as.data.frame(table(y*x))
cumhaz<-sum(ind*ta2$Freq/ta$den)
return(cumhaz)}