根据data.R表中组内不同列中的后续值选择值

根据data.R表中组内不同列中的后续值选择值,r,data.table,R,Data.table,我有以下数据表。 对于每组ID和药物,我想分配一个新变量maxi。Maxi是组中val1的最高值,位于组中最高val2之前 library(data.table) id <- c(1,1,1,1,2,2,2,3,3,3) val1 <- c(17,18,19,13,11,12,14,15,20,21) val2 <- c(20,21,30,32,33,34,36,20,31,28) drug <- c("A","A","A","B","B","A","A","A","B"

我有以下数据表。 对于每组ID和药物,我想分配一个新变量maxi。Maxi是组中val1的最高值,位于组中最高val2之前

library(data.table)
id <- c(1,1,1,1,2,2,2,3,3,3)
val1 <- c(17,18,19,13,11,12,14,15,20,21)
val2 <- c(20,21,30,32,33,34,36,20,31,28)
drug <- c("A","A","A","B","B","A","A","A","B","B")
dat <- data.table(id,val1,val2,drug)


   id val1 val2 drug
1:  1   17   20    A
2:  1   18   21    A
3:  1   19   30    A
4:  1   13   32    B
5:  2   11   33    B
6:  2   12   34    A
7:  2   14   36    A
8:  3   15   20    A
9:  3   20   31    B
10: 3   21   28    B
我尝试的最后一段代码如下:

dat[,maxi := dat[(.I[age < age_check]),age,by = .(id, drug)],by = .(id, drug)]

谢谢

这就是你想要的吗

dat[, maxi := max(val1[val1 < max(val2)]), by = .(id, drug)]
或者,当观察到val2的最大值时,您是否需要val1的值

library(data.table)
dat[, maxi := val1[which.max(val2)], by = .(id, drug)]

dat
#    id val1 val2 drug maxi
# 1:  1   17   20    A   19
# 2:  1   18   21    A   19
# 3:  1   19   30    A   19
# 4:  1   13   32    B   13
# 5:  2   11   33    B   11
# 6:  2   12   34    A   14
# 7:  2   14   36    A   14
# 8:  3   15   20    A   15
# 9:  3   20   31    B   20
#10:  3   21   28    B   20

你能解释为什么21是最后一组的值吗?似乎它没有出现在31的最大值之前。@Frank,我编辑了这个问题以澄清我的意图。希望这有帮助!
    id val1 val2 drug maxi
 1:  1   17   20    A   19
 2:  1   18   21    A   19
 3:  1   19   30    A   19
 4:  1   13   32    B   13
 5:  2   11   33    B   11
 6:  2   12   34    A   14
 7:  2   14   36    A   14
 8:  3   15   20    A   15
 9:  3   20   31    B   21
10:  3   21   28    B   21
library(data.table)
dat[, maxi := val1[which.max(val2)], by = .(id, drug)]

dat
#    id val1 val2 drug maxi
# 1:  1   17   20    A   19
# 2:  1   18   21    A   19
# 3:  1   19   30    A   19
# 4:  1   13   32    B   13
# 5:  2   11   33    B   11
# 6:  2   12   34    A   14
# 7:  2   14   36    A   14
# 8:  3   15   20    A   15
# 9:  3   20   31    B   20
#10:  3   21   28    B   20