Fx claim_x
1 0.00 0
2 0.05 0
3 0.06 0
4 0.10 0
5 0.30 0
6 0.35 100
7 0.50 350
8 0.60 350
9 0.70 850
10 0.79 2350
11 0.90 4850
12 1.00 4850
以上是数据框。如果我想group_by Claim_x并选择Fx的最小值,我可以这样做:
min <- df %>% dplyr::group_by(claim_x) %>% dplyr::summarise(Fx=min(Fx))
如果我想要最大,我可以这样做:
max <- points %>% dplyr::group_by(claim_x) %>% dplyr::summarise(Fx=max(Fx))
问题是,如何在同一列中同时选择最小值和最大值?因此,输出应具有与输入相同的结构,即仅包含Fx和Claim_x列的数据帧。
输出应为:
# A tibble: 9 x 2
claim_x Fx
<dbl> <dbl>
1 0 0
2 0 0.3
3 100 0.35
4 350 0.5
5 350 0.6
6 850 0.7
7 2350 0.79
8 4850 0.9
9 4850 1
答案 0 :(得分:1)
我们可以使用range
并将其作为list
列,然后再输入unnest
df %>%
group_by(claim_x) %>%
summarise(Fx = list(range(Fx))) %>%
unnest %>%
distinct
# A tibble: 9 x 2
# claim_x Fx
# <int> <dbl>
#1 0 0
#2 0 0.3
#3 100 0.35
#4 350 0.5
#5 350 0.6
#6 850 0.7
#7 2350 0.79
#8 4850 0.9
#9 4850 1
或使用data.table
library(data.table)
unique(setDT(df)[, .(Fx = range(Fx)), by = claim_x])
df <- structure(list(Fx = c(0, 0.05, 0.06, 0.1, 0.3, 0.35, 0.5, 0.6,
0.7, 0.79, 0.9, 1), claim_x = c(0L, 0L, 0L, 0L, 0L, 100L, 350L,
350L, 850L, 2350L, 4850L, 4850L)), class = "data.frame",
row.names = c("1",
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"))