在R

时间:2018-05-16 00:53:53

标签: r

我在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。

我不确定解决此问题的最佳方法。我很感激任何帮助。

1 个答案:

答案 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])
}