r - 在组中查找最大值,按来自不同数据帧的子集查找最大值,以选择其他值
问题描述
我有两个带有原始数据的 data.frames df1。df2 包含有关在 df1 中查找位置的信息。df1 有组,由“id”定义。在这些组中,一个子集由 df2$value_a1 和 df2$value_a2 定义,它们表示要在组中查找的行范围。在该子组中,我想找到最大值 value_a,以选择 value_b。
df1 和 df2 的代码
df1 <- data.frame("id" = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3), "value_a" = c(0, 10, 21, 30, 43, 53, 69, 81, 93, 5, 16, 27, 33, 45, 61, 75, 90, 2, 11, 16, 24, 31, 40, 47, 60, 75, 88), "value_b" = c(100, 101, 100, 95, 90, 104, 88, 84, 75, 110, 105, 106, 104, 95, 109, 96, 89, 104, 104, 104, 103, 106, 103, 101, 99, 98, 97), "value_c" = c(0, -1, -2, -2, -2, -2, -1, -1, 0, 0, 0, 0, 1, 1, 2, 2, 1, -1, 0, 0, 1, 1, 2, 2, 1, 1, 0), "value_d" = c(1:27))
df2 <- data.frame("id" = c(1, 2, 3), "value_a1" = c(21, 33, 16), "value_a2" = c(69, 75, 60))
这是df1
id value_a value_b value_c value_d
1 1 0 100 0 1
2 1 10 101 -1 2
3 1 21 100 -2 3
4 1 30 95 -2 4
5 1 43 90 -2 5
6 1 53 104 -2 6
7 1 69 88 -1 7
8 1 81 84 -1 8
9 1 93 75 0 9
10 2 5 110 0 10
11 2 16 105 0 11
12 2 27 106 0 12
13 2 33 104 1 13
14 2 45 95 1 14
15 2 61 109 2 15
16 2 75 96 2 16
17 2 90 89 1 17
18 3 2 104 -1 18
19 3 11 104 0 19
20 3 16 104 0 20
21 3 24 103 1 21
22 3 31 106 1 22
23 3 40 103 2 23
24 3 47 101 2 24
25 3 60 99 1 25
26 3 75 98 1 26
27 3 88 97 0 27
这是df2
id value_a1 value_a2
1 1 21 69
2 2 33 75
3 3 16 60
我的结果是 df3,看起来像这样
id value_a value_c
1 1 53 -2
2 2 61 2
3 3 31 1
我写了这段代码来展示我的思路。
df3 <- df1 %>%
group_by(id) %>%
filter(value_a >= df2$value_a1 & value_a <= df2$value_a2) %>%
filter(value_a == max(value_a)) %>%
pull(value_b)
然而,这会生成一个包含三个条目的值:
[1] 88 95 99
这些不是最大值_b的......
也许by()
会起作用,但这会卡在两个不同的df上使用一个函数。
感觉就快到了,但还远着呢……
解决方案
你可以试试这个。我希望这有帮助。
df1 %>% left_join(df2) %>% mutate(val=ifelse(value_a>value_a1 & value_a<value_a2,value_b,NA)) %>%
group_by(id) %>% summarise(val=max(val,na.rm=T))
# A tibble: 3 x 2
id val
<dbl> <dbl>
1 1 104
2 2 109
3 3 106
推荐阅读
- php - 将数据从数据库检索到 Android 时出错
- google-sheets - 谷歌表格平均每小时获得提示
- android - 开始 avd 错误 java.lang.NoClassDefFoundError
- android - 导航架构组件 - 导航抽屉
- xml - 编辑和保存 XML 文件,vb.net
- scala - Scala Traits - 如何多次扩展一个特征?
- php - 在codeigniter中访问num_rows并返回ajax
- stripe-payments - 如何使用 Stripe 3ds 保存卡片?
- google-api - 位置数据 Google Photos API
- mysql - JOIN 两个查询结果(有 WHERE 和 IN 子句 + 子查询)