使用 if () 函数根据条件计算经过的时间
calculate elapsed time based on condition using if () function
我正在尝试根据特定条件计算经过的时间。在数据集中,aDUR 表示经过的时间,TSFD 表示以小时为单位的时间。我只需要计算FLAG1 =1时的aDUR,应该是第[i+1]条记录的TSFD减去第[i]条记录的TSFD。当FLAG1 = 0时,所有记录aDUR都赋值1。
这是我的数据集示例。
head(df1_2)
C ID DV DATE TIME TSFD TSLD DOSE MDV EVID RATE DUR WT AGE HEIGHT BMI SEX AMT FLAG1
<lgl> <int> <fct> <fct> <fct> <dbl> <dbl> <int> <int> <int> <dbl> <fct> <dbl> <dbl> <fct> <fct> <fct> <fct> <dbl>
1 NA 11003 . 3/14/2007 22:00 0 0 75 1 1 246. . 54.7 44.6 73 15.89851181 Female 245.97 0
2 NA 11003 . 3/14/2007 23:00 1 0 75 1 1 246. . 54.7 44.6 73 15.89851181 Female 245.97 1
3 NA 11003 . 3/15/2007 1:00 3 0 75 1 1 246. . 54.7 44.6 73 15.89851181 Female 245.97 0
4 NA 11003 . 3/15/2007 2:00 4 0 75 1 1 246. . 54.7 44.6 73 15.89851181 Female 245.97 0
5 NA 11003 . 3/15/2007 3:00 5 0 75 1 1 246. . 54.7 44.6 73 15.89851181 Female 245.97 0
6 NA 11003 . 3/15/2007 4:00 6 0 75 1 1 246. . 54.7 44.6 73 15.89851181 Female 245.97 1
我是 R 的新手。这是我能想到的,但它不起作用。有人可以指出我哪里做错了吗?我也试过 ifelse,但我不知道如何计算 ifelse 函数中的经过时间。
f2 <-function(fc){
TSFD <- fc$TSFD
FLAG1 <- fc$FLAG1
aDUR <- rep(1,length(FLAG1))
for (i in 1:length(FLAG1))
if(FLAG1 == 1) {aDUR[i] <- TSFD[i+1]-TSFD[i]}
fc$aDUR <- aDUR
return(fc)
}
此外,我在数据集中有多个主题。如何根据 ID 组应用此功能?
我试过了df2 <- df1_2%>%group_by(ID)%>%f2(.)
。它不起作用。
提前感谢您的任何意见。
我想,你需要:
df <- df %>%
group_by(ID) %>%
mutate(aDUR = c(0, diff(TSFD)))
我正在尝试根据特定条件计算经过的时间。在数据集中,aDUR 表示经过的时间,TSFD 表示以小时为单位的时间。我只需要计算FLAG1 =1时的aDUR,应该是第[i+1]条记录的TSFD减去第[i]条记录的TSFD。当FLAG1 = 0时,所有记录aDUR都赋值1。
这是我的数据集示例。
head(df1_2)
C ID DV DATE TIME TSFD TSLD DOSE MDV EVID RATE DUR WT AGE HEIGHT BMI SEX AMT FLAG1
<lgl> <int> <fct> <fct> <fct> <dbl> <dbl> <int> <int> <int> <dbl> <fct> <dbl> <dbl> <fct> <fct> <fct> <fct> <dbl>
1 NA 11003 . 3/14/2007 22:00 0 0 75 1 1 246. . 54.7 44.6 73 15.89851181 Female 245.97 0
2 NA 11003 . 3/14/2007 23:00 1 0 75 1 1 246. . 54.7 44.6 73 15.89851181 Female 245.97 1
3 NA 11003 . 3/15/2007 1:00 3 0 75 1 1 246. . 54.7 44.6 73 15.89851181 Female 245.97 0
4 NA 11003 . 3/15/2007 2:00 4 0 75 1 1 246. . 54.7 44.6 73 15.89851181 Female 245.97 0
5 NA 11003 . 3/15/2007 3:00 5 0 75 1 1 246. . 54.7 44.6 73 15.89851181 Female 245.97 0
6 NA 11003 . 3/15/2007 4:00 6 0 75 1 1 246. . 54.7 44.6 73 15.89851181 Female 245.97 1
我是 R 的新手。这是我能想到的,但它不起作用。有人可以指出我哪里做错了吗?我也试过 ifelse,但我不知道如何计算 ifelse 函数中的经过时间。
f2 <-function(fc){
TSFD <- fc$TSFD
FLAG1 <- fc$FLAG1
aDUR <- rep(1,length(FLAG1))
for (i in 1:length(FLAG1))
if(FLAG1 == 1) {aDUR[i] <- TSFD[i+1]-TSFD[i]}
fc$aDUR <- aDUR
return(fc)
}
此外,我在数据集中有多个主题。如何根据 ID 组应用此功能?
我试过了df2 <- df1_2%>%group_by(ID)%>%f2(.)
。它不起作用。
提前感谢您的任何意见。
我想,你需要:
df <- df %>%
group_by(ID) %>%
mutate(aDUR = c(0, diff(TSFD)))