我在R中有两个data.tables。
表A有ID_A,天和组。
表B包含ID_B,天,组和value_of_interest。
我尝试向A,max_value_of_interest添加一列,其中值是组中所有行中value_of_interest的最大值,其中B中的天数大于表A中的天数。
我试着用另一种方式描述它:
表A:
ID_A days group
A1 5 X
我想在A中添加一个包含B的最大value_of_interest的列,其中最大值选自B,其中B.group = X和B.days> 5(大于行A1中的值)。
我找到了按群组查找最大值的解决方案,但我无法确定如何添加条件以仅考虑按群组划分的B.days的值> A.days。
我不确定解决此问题的最佳方法。我很感激任何帮助。
答案 0 :(得分:0)
循环表A的行可能最容易。对于每一行,选择B的相关行,然后找到最大值。
library(tidyverse)
A <- tibble(ID_A=paste("A", 1:5, sep=""),
days=seq(5,1,-1),
group=c("X", "X", "X", "Y", "Y"),
max_val=NA)
B <- tibble(ID_B=paste("A", 1:5, sep=""),
days=seq(3,7,1),
group=c("X", "X", "X", "Y", "Y"),
val=runif(5))
for (i in 1:nrow(A)){
B_sel <- B %>%
filter(group==A$group[i] & days>A$days[i])
if (nrow(B_sel)>0)
A$max_val[i] <- max(B_sel$val)
}
或
for (i in 1:nrow(A)){
rows <- which(B$group==A$group[i] & B$days>A$days[i])
if (length(rows)>0)
A$max_val[i] <- max(B$val[rows])
}