我想学习如何编写函数R我有一个非常具体的问题关于使用表和如何处理“水平变量”。表频率数值分类操作函数
我最初的问题是写一个累积危险函数。我的功能基本上没有这样的:
实施例:数据x= c(1,1,2,2,2,3,14,25)
具有8个观测/倍
从矢量8个观测做F(14)进行以下操作= 2/8 + 3/6 +对于F(2)= 2/8 + 3/6,1/3 + 1/2 ,依此类推。
基本上我想要的总和:(有多少观测值有时间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)}