根据data.R表中组内不同列中的后续值选择值
我有以下数据表。 对于每组ID和药物,我想分配一个新变量maxi。Maxi是组中val1的最高值,位于组中最高val2之前根据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"
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