r - 在R中按组和条件查找列的最大值
问题描述
我在 R 中有两个 data.tables。
表 A 具有 ID_A、天数和组。
表 B 有 ID_B、days、group 和 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 by group > A.days 的值。
我不确定解决这个问题的最佳方法。我会很感激任何帮助。
解决方案
循环遍历表 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])
}
推荐阅读
- laravel - 如何在 Laravel 中控制对另一台服务器上文件的访问
- vba - 如何绕过 VBA 批量替换功能的 255 个字符限制?
- android - 一个典型的android应用程序使用多少内存是合理的
- kubernetes - Helm 推荐方法中的持久卷、声明和副本
- android - 在 android 可绘制项目部分从 mipmap 添加图像
- javascript - REST API 使用 Swagger 和 Node.js 以及 SQL Server 作为数据库
- c++ - 使用某个宏时如何禁止调用特定函数
- java - 使用 POSTGRES 和 eclipselink 的 JPA 日期截断组
- docker - Jenkins 文件图像标记参数不起作用
- python - 熊猫附加不起作用