r - 组合 group_by、ifelse 和 filter
问题描述
我想结合 group_by、ifelse 并为下面的示例数据框过滤我的代码。我想要的是以下内容:1)按x分组。2)检查结果是否> 1。如果为真,检查该组的结果> 1 == max(月)的月份。如果为 TRUE,则选择该组的所有行。所有其他行都应该被丢弃(所以在结果 <= 1 或 (month where result > 1 != max(month)) 的情况下。所以在我的示例数据框中,B 的所有行都应该保留,A 的所有行都应该保留丢弃。
x month result
1 A 1 0.5
2 A 2 0.6
3 A 3 1.2
4 A 4 1.1
5 A 5 0.9
6 B 1 0.3
7 B 2 0.4
8 B 3 0.5
9 B 4 0.9
10 B 5 1.2
dat <- data.frame(x = c("A","A","A","A","A","B","B","B","B","B"),
month = c(1,2,3,4,5,1,2,3,4,5),
result = c(.5,.6,1.2,1.1,.9,.3,.4,.5,.9,1.2))
解决方案
使用data.table
library(data.table)
setDT(dat)[, .SD[result[which.max(month)] > 1], x]
# x month result
#1: B 1 0.3
#2: B 2 0.4
#3: B 3 0.5
#4: B 4 0.9
#5: B 5 1.2
或与dplyr
library(dplyr)
dat %>%
group_by(x) %>%
filter(result[which.max(month)] > 1)
# A tibble: 5 x 3
# Groups: x [1]
# x month result
# <fct> <dbl> <dbl>
#1 B 1 0.3
#2 B 2 0.4
#3 B 3 0.5
#4 B 4 0.9
#5 B 5 1.2
推荐阅读
- python - Django create_or_update 获取更改字段
- javascript - 对象在反应渲染中作为 React 子级无效(找到:[object Promise])
- javascript - React 状态更新正确,除了在 gameloop 函数中
- javascript - 过滤多个字段的数据
- javascript - 无法等待 Node.js 中的 sqlite3.Database.get() 函数完成
- xcode11 - 跳转到 Xcode 中的定义不能跳转到正确的重载函数。这是一个错误吗?有什么解决方法吗?
- python - 为什么将 preload_app 添加到 gunicorn 会阻止它启动,除非发送 SIGINT?
- postgresql - 获取一个月内所有日期的年龄 Postgresql 查询
- swift - iTunes/Apple Music 永久 ID
- javascript - 如何使用 Cloud Functions 安排对 Firebase Firestore 数据库中的集合进行批量更新?