2017-02-11 39 views
0

Rに関数を書く方法を学びたいと思います。テーブルの使用方法と "レベル変数"の扱いについては、非常に具体的な質問があります。テーブル頻度数値カテゴリ操作関数

私の元の問題は、累積ハザード関数を書くことです。

例:8つの観察はF(14)のために以下の動作を行うベクターから8の観察/回

  1. を有するデータx= c(1,1,2,2,2,3,14,25) = 2/8 + 3/6 +私の機能は、基本的にこれを行いますF(2)= 2/8 + 3/6の場合、1/3 + 1/2 となる。

  2. 基本的には、(いくつの観測値に時間iがあるか)/(何度観測値がi以上であるか) i = 2の場合、2/8 )+ 3 /(6)となる。時間iが2以上の観測が6回あるからである。

具体的には、機能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)} 

答えて

0

sapplytable

x <- c(1,1,2,2,2,3,14,25) 
myTab <- table(x) 

myTab/sapply(seq_along(myTab), function(i) sum(tail(c(0, myTab), -i))) 
x 
     1   2   3  14  25 
0.2500000 0.5000000 0.3333333 0.5000000 1.0000000 
ここ

tailを用いて一つの方法は、連続的にXの先頭から値を削除しています。残りの値は合計されます。 sapplyは、xの始めから最終値までの値に対してこれを行います。これを達成するために、私はxに0を前置きしました。集計は、xを分けて比率を返します。