我有一个类似的问题,here,但这个问题有点不同。
我想返回的值与匹配条件在另一列的基础上的切分标准。如果在变量中无法获得裁剪分数,我希望在第一次和第二次切分中获得最接近的更大的值,并在第三次切分中获取最接近的最小值。以下是dataset的快照:
ids <- c(1,2,3,4,5,6,7,8,9,10)
scores.a <- c(512,531,541,555,562,565,570,572,573,588)
scores.b <- c(12,13,14,15,16,17,18,19,20,21)
data <- data.frame(ids, scores.a, scores.b)
> data
ids scores.a scores.b
1 1 512 12
2 2 531 13
3 3 541 14
4 4 555 15
5 5 562 16
6 6 565 17
7 7 570 18
8 8 572 19
9 9 573 20
10 10 588 21
cuts <- c(531, 560, 571)我想获取与第一个切分对应的score.b值,即13。然后,抓取与第二次切分(560)分数相对应的记分.b值,但它不在记分中.A,所以我想得到分数.A值562 (最接近560的larger ),对应的值是16。最后,对于第三个切分(571),我想得到18,这是最接近的smaller值(570)和第三个切分的对应值。
这是我想要的。
scores.b
cut.1 13
cut.2 16
cut.3 18有什么想法吗?谢谢
发布于 2020-01-23 16:32:15
data %>%
mutate(cts = Hmisc::cut2(scores.a, cuts = cuts)) %>%
group_by(cts) %>%
summarise( mn = min(scores.b),
mx = max(scores.b)) %>%
slice(-c(1,4)) %>% unlist() %>% .[c(3,4,6)] %>%
data.frame() %>%
magrittr::set_colnames("scores.b") %>%
magrittr::set_rownames(c("cut.1", "cut.2", "cut.3"))
scores.b
cut.1 13
cut.2 16
cut.3 18发布于 2020-01-23 16:30:13
使用tidyverse
data %>%
mutate(cuts_new = cut(scores.a, breaks = c(531,560,570, 1000), right = F)) %>%
group_by(cuts_new) %>% summarise(first_sb = first(scores.b)) %>%
ungroup()在以下方面的成果:
# A tibble: 4 x 2
cuts_new first_sb
<fct> <dbl>
1 [531,560) 13
2 [560,570) 16
3 [570,1e+03) 18
4 NA 12https://stackoverflow.com/questions/59882916
复制相似问题