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
(最接近 larger
到 560
),对应的值为 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
我有一个类似的问题
我想 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
(最接近 larger
到 560
),对应的值为 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