r 中具有匹配条件的子集值

Subset values with matching criteria in r

我有一个类似的问题,但这个问题略有不同。

我想 return 值与另一列中基于评分标准的匹配条件。如果变量中没有切割分数,我想为第一次和第二次切割获取最接近的较大值,并为第三次切割获取最接近的最小值。这是数据集的快照:

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)

我想获取第一个cut score对应的score.b值,即13。然后,抓取第二个cut(560)分数对应的score.b值,但它不在score.a中,所以我想得到score.a值562(最接近 larger560),对应的值为 16。最后,对于第三次切分(571),我想得到 18,这是最接近第三次切分的 smaller 值(570)对应的值。

这是我想要得到的。

       scores.b
cut.1  13
cut.2  16
cut.3  18

有什么想法吗? 谢谢

使用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                12
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