应用函数计算每个受试者的AUC

时间:2014-10-27 08:00:46

标签: r

我想计算许多受试者(约200名受试者)的浓度 - 时间曲线的曲线下面积(AUC)。我正在使用MESS包裹:

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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