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

时间:2019-02-07 23:55:31

标签: r data.table

我有以下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)]

谢谢!

2 个答案:

答案 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