2017-02-11 14 views
0

R에 함수를 작성하는 방법을 배우려하고 있으며 테이블 사용과 "수준 변수"를 처리하는 방법과 관련하여 매우 구체적인 질문이 있습니다.테이블 빈도 숫자 범주 작업 함수

내 원래의 문제는 누적 된 위험 기능을 작성하는 것입니다.

예 : 내 기능은 기본적으로이 수행 된 데이터 8 개 관측치가 x= c(1,1,2,2,2,3,14,25)/시간

  1. 8 개 관측 F (14)는 다음 동작을 수행 벡터에서

    = 2/8 + 3/6 + 1/3 + 1/2 for F (2) = 2/8 + 3/6, 등등.

  2. 기본적으로 나는 (얼마나 많은 관측치가 시간 i인지)/(몇 관측치가 i보다 크거나 같은 시간) 그래서 i = 2의 경우 2/8) + 3/(6)이다. 왜냐하면 시간 i가 2 이상인 6 가지 관측이 있기 때문이다.

특히 table 기능을 사용하고있었습니다. 그러나이 함수는 나에게 주파수를 주며 주파수와 관련된 값을 숫자가 아닌 레벨로 취급합니다. 1,2,3,14,15하지만 난 등의 작업을 수행하려고 할 때 : 내 데이터에 대한

나는 5 개 수준이 그러나

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

여기 sapply 여기서

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 

table을 사용하는 하나의 방법, tail 연속 X의 선두로부터의 값을 제거한다. 나머지 값은 함께 합산됩니다. sapply은 x의 시작부터 최종 값까지의 값에 대해이 작업을 수행합니다. 이것을 달성하기 위해, 나는 x에 0을 붙였다. 합계는 x를 나누어 비율을 반환합니다.