我有以下data.table。 我想为每组ID&drug分配一个新变量(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
因此对于id == 2和drug == A来说,val2的最大值是36,而在val1列中出现在36之前的最大可能值是14。输出看起来像这样:
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
我尝试的最终代码段如下:
dat[,maxi := dat[(.I[age < age_check]),age,by = .(id, drug)],by = .(id, drug)]
谢谢!
答案 0 :(得分:3)
这是你的追求吗?
#include
输出:
yylex()
答案 1 :(得分:1)
或者在观察到val1
的最大值时是否需要val2
的值。
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