2014-10-27 37 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