This question already has answers here:
How to use Dplyr's Summarize and which() to lookup min/max values
(3 个回答)
2年前关闭。
我正在尝试通过 R 中的分组变量创建多个条件。
我想要做的是在分组变量中获取索引的
例如,如果我们查看
预期输出
(3 个回答)
2年前关闭。
我正在尝试通过 R 中的分组变量创建多个条件。
我想要做的是在分组变量中获取索引的
min
和 max
并提取出相应的价格。所需的输出如下所示df <- data.frame(ID = c("ABC", "ABC", "BCD", "BCD", "BCD", "DEF", "DEF"),
Price = c(31, 81, 100, 84, 15, 31, 42),
Index = c(3,6,2,9,5,12,18))
df
ID Price Index
1 ABC 31 3
2 ABC 81 6
3 BCD 100 2
4 BCD 84 9
5 BCD 15 5
6 DEF 31 12
7 DEF 42 18
例如,如果我们查看
ID
= "BCD",则有 3 个条目。根据指数,在 min(index) = 2
处,价格 = 100,在 max(index) = 9
处,价格为 84df %>% group_by(ID) %>% mutate(firstPrice = min(df$Order), lastPrice = max(df$Order))
ID Price Order firstPrice lastPrice
<fct> <dbl> <dbl> <dbl> <dbl>
1 ABC 31 3 2 18
2 ABC 81 6 2 18
3 BCD 100 2 2 18
4 BCD 84 9 2 18
5 BCD 15 5 2 18
6 DEF 31 12 2 18
7 DEF 42 18 2 18
预期输出
ID Price Order firstPrice lastPrice
1 ABC 31 3 31 81
2 ABC 81 6 31 81
3 BCD 100 2 100 84
4 BCD 84 9 100 84
5 BCD 15 5 100 84
6 DEF 31 12 31 42
7 DEF 42 18 31 42
最佳答案
我们可以 group_by
ID
并使用 which.min
和 which.max
获取索引,然后从中获取对应的 Price
library(dplyr)
df %>%
group_by(ID) %>%
mutate(firstPrice = Price[which.min(Index)],
lastPrice = Price[which.max(Index)])
# ID Price Index firstPrice lastPrice
# <fct> <dbl> <dbl> <dbl> <dbl>
#1 ABC 31 3 31 81
#2 ABC 81 6 31 81
#3 BCD 100 2 100 84
#4 BCD 84 9 100 84
#5 BCD 15 5 100 84
#6 DEF 31 12 31 42
#7 DEF 42 18 31 42
关于r - 使用 dplyr 通过分组变量解析多个条件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54251065/
10-12 18:50