2014-10-27 36 views
0

我想計算許多受試者(〜200個受試者)的濃度 - 時間曲線的曲線下面積(AUC)。我正在使用軟件包MESS,其中:應用功能來計算每個受試者的AUC

AUC = auc(data$TIME,data$CONC, type = "spline") 

如何將它應用於數據集中的每個唯一ID?並通過在原始數據集中添加新的「AUC」列將結果保留在R中?

數據有以下欄目:

ID TIME CONC 
1 0 0 
1 2 4 
1 3 7 
2 0 0 
2 1 NA 
2 3 5 
2 4 10 

回答

1

一種方式會是這樣。 foo是你的數據。

library(MESS) 
library(dplyr) 

foo %>% 
    group_by(ID) %>% 
    summarize(AUC = auc(TIME,CONC, type = "spline")) 

# ID  AUC 
#1 1 9.12500 
#2 2 12.08335 

如果你想保留所有數據,你可以這樣做。

foo %>% 
    group_by(ID) %>% 
    mutate(AUC = auc(TIME,CONC, type = "spline")) 

# ID TIME CONC  AUC 
#1 1 0 0 9.12500 
#2 1 2 4 9.12500 
#3 1 3 7 9.12500 
#4 2 0 0 12.08335 
#5 2 1 NA 12.08335 
#6 2 3 5 12.08335 
#7 2 4 10 12.08335 
0

在我看來,由@jazzurro提供的dplyr解決方案是要走的路,但這裏的好措施一base方法。

d <- read.table(text='ID TIME CONC 
1 0 0 
1 2 4 
1 3 7 
2 0 0 
2 1 NA 
2 3 5 
2 4 10', header=TRUE) 


library(MESS) 
auc <- t(sapply(split(d, d$ID), function(x) { 
    data.frame(ID=x$ID[1], auc=auc(x$TIME, x$CONC, type='spline')) 
})) 

merge(d, auc) 

# ID TIME CONC  auc 
# 1 1 0 0 9.125 
# 2 1 2 4 9.125 
# 3 1 3 7 9.125 
# 4 2 0 0 12.08335 
# 5 2 1 NA 12.08335 
# 6 2 3 5 12.08335 
# 7 2 4 10 12.08335