返回r中符合条件的值

2024-03-19

我想根据分数标准返回另一列中具有匹配条件的值。如果变量中没有分数,我想获取最接近的较大值。这是数据集的快照:

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(最靠近560),对应的值为16。最后,对于第三次晋级分数(571),我想得到19,它是最接近值的对应值(572) 到第三个晋级分数。

这就是我想要得到的。

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

有什么想法吗? 谢谢


我们可以使用滚动连接

library(data.table)
setDT(data)[data.table(cuts = cuts), .(ids = ids, cuts, scores.b), 
          on = .(scores.a = cuts), roll = -Inf]
#   ids cuts scores.b
#1:   2  531       13
#2:   5  560       16
#3:   8  571       19

或者另一个选择是findInterval from base R更改标志并采取后reverse

with(data, scores.b[rev(nrow(data) + 1 - findInterval(rev(-cuts), rev(-scores.a)))])
#[1] 13 16 19
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

返回r中符合条件的值 的相关文章

随机推荐