r-编写用于计算Concentration_Time数据的Cmax和Tmax的代码



我有很多个人的集中时间数据。我想找出每个个体的Cmax(最大浓度)和Tmax(达到Cmax的时间)。我想通过在原始数据集中添加新的"Cmax"one_answers"Tmax"列来保留R中的结果。

数据帧如下所示:

#df <- 
ID TIME CONC 
1   0    0
1   1    10
1   2    15
1   5    12
2   1     5 
2   2     10
2   5     20
2   6     10

等等。我一开始想为一个人找到Cmax,但这并没有让我走到哪里。任何修复代码的帮助或更容易找到两者(Cmax和Tmax)的方法都是非常可观的!

 Cmax=function(df) {
 n = length(df$CONC)  
 c_temp=0  # this is a temporary counter
 c_max=0   
for(i in 2:n){  
  if(df$CONC[i] > df$CONC[i-1]{ 
  c_temp= c_temp+1   
  if(c_temp > c_max) c_max=c_temp  # check  
 } 
 }
return(c_max)  
}

尝试

library(dplyr)
df %>% 
     group_by(ID) %>% 
     mutate(Cmax= max(CONC), Tmax=TIME[which.max(CONC)])         
#   ID TIME CONC Cmax Tmax
#1  1    0    0   15    2
#2  1    1   10   15    2
#3  1    2   15   15    2
#4  1    5   12   15    2
#5  2    1    5   20    5
#6  2    2   10   20    5
#7  2    5   20   20    5
#8  2    6   10   20    5

或使用data.table

library(data.table)
setDT(df)[, c("Cmax", "Tmax") := list(max(CONC),
                          TIME[which.max(CONC)]), by=ID]

或使用base R 中的split

unsplit(lapply(split(df, df$ID), function(x) 
                 within(x, {Cmax <- max(CONC)
                            Tmax <- TIME[which.max(CONC)] })),
                                    df$ID)
#  ID TIME CONC Tmax Cmax
#1  1    0    0    2   15
#2  1    1   10    2   15
#3  1    2   15    2   15
#4  1    5   12    2   15
#5  2    1    5    5   20
#6  2    2   10    5   20
#7  2    5   20    5   20
#8  2    6   10    5   20

数据

df <- structure(list(ID = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), TIME = c(0L, 
 1L, 2L, 5L, 1L, 2L, 5L, 6L), CONC = c(0L, 10L, 15L, 12L, 5L, 
 10L, 20L, 10L)), .Names = c("ID", "TIME", "CONC"), class = "data.frame", 
 row.names = c(NA, -8L))

最新更新