Значения подмножества с критериями соответствия в r - PullRequest
0 голосов
/ 23 января 2020

У меня был похожий вопрос здесь , но этот вопрос немного отличается.

Я хотел бы вернуть значения с условиями сопоставления в другом столбце на основе критерия оценки сокращения. Если оценки не доступны в переменной, я хотел бы получить самое близкое большее значение для первого и второго разреза и захватить самое маленькое значение для третьего разреза. Вот снимок набора данных:

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. Затем возьмите значение для Score.b, соответствующее второму результату (560), но его нет в файле Score.a, поэтому я хотел бы получить значение Score.a 562 (ближайшее larger к * 1013). *), и соответствующее значение будет 16. Наконец, для третьего результата (571) я бы хотел получить 18, что соответствует значению, ближайшему smaller (570) к третьему результату.

Вот что я хотел бы получить.

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

Есть мысли? Спасибо

Ответы [ 2 ]

2 голосов
/ 23 января 2020

Использование 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
1 голос
/ 23 января 2020
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
...