Re: [問題] 關於重複測量資料
※ 引述《yummy7922 (crucify)》之銘言:
: [問題類型]:
: 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來)
: [軟體熟悉度]:
: 入門(寫過其他程式,只是對語法不熟悉)
: [問題敘述]:
: 我的資料是重複測量的資料,資料中有13820位病人的多次測量值,
: 但不是每位病人的觀察筆數都相同,
: 我想要針對每一位病人,將每三筆資料計算一個平均值,
: 最後不到三筆的資料也算一個平均值,
: 不過我不知道該如何做,想請教各位高手們,謝謝。
# dataset
N=30000;n=20;obs=15 # N=病患數 n=隨機重複次數 obs=觀測項數
a=Sys.time()
each_times=sample(n,N,replace=T)
cum=cumsum(each_times)
patient_name=rep(paste('patient',1:N,sep="-"),each_times)
obs_times=rep(1,length(patient_name));obs_times[cum]=obs_times[cum]-each_times
obs_times=cumsum(obs_times);obs_times[cum]=each_times
total=sum(each_times)
V=matrix(rnorm(total*obs),,obs)
dataset=cbind(obs_times,V)
row.names(dataset)=patient_name;colnames(dataset)=c('obs_times',paste('V',1:obs,sep=""))
Sys.time()-a
# N=30000;n=20;obs=15 => Time difference of 0.555032 secs
# N=13820;n=15;obs=1 => Time difference of 0.03400207 secs
# result
k=3
b=Sys.time()
times_a=dataset[,'obs_times']
data_m=matrix(dataset[,-1],,obs)
c_data_m=apply(data_m,2,cumsum)
filter_times=times_a%in%seq(k,max(times_a)%/%k*k,by=k)
filter_times[c((times_a==1)[-1],FALSE)]=TRUE
f_data_m=c_data_m[filter_times,]
times_end=times_a[filter_times]
times_length=times_end%%k;times_length[times_length==0]=k
times_start=times_end-times_length+1
times_info=paste(times_start,times_end,sep='-')
names_info=row.names(dataset)[filter_times]
if(obs!=1){
result_mean=apply(f_data_m,2,function(x){c(x[1],diff(x))/times_length})
}else{
result_mean=c(f_data_m[1],diff(f_data_m))/times_length
}
result=data.frame(names_info,times_info,matrix(result_mean,,obs))
Sys.time()-b
# N=30000;n=20;obs=15 => Time difference of 1.088062 secs
# N=13820;n=15;obs=1 => Time difference of 0.2040122 secs
# validation
patient=paste('patient',sample(N,1),sep='-')
dataset[row.names(dataset)==patient,]
result[names_info==patient,]
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.220.44.209
※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1425378818.A.848.html
推
03/07 13:46, , 1F
03/07 13:46, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):
R_Language 近期熱門文章
PTT數位生活區 即時熱門文章