在下面,data1是一个主数据库。 data2是将分数映射到级别的函数。我想为data1分配级别。
data1 <- data_frame(id=1:6,score=1:6-0.1)
data2 <- data_frame(score=2:4,level=c("a","b","c"))
最终输出:
id score level
1 0.9 a
2 1.9 a
3 2.9 b
4 3.9 c
5 4.9 c
6 5.9 c
本质上,
if score < data2$score[1], level = data2$score[1].
if score > data2$score[length(data2$score)], level = data2$score[length(data2$score)].
if data2$score[i] < score < data2$score[i+1], level = data2$level[i]
有没有一种方法可以使用dplyr(最好是R)或基数R实现呢?我知道data.table也许可以做到这一点,但我也想寻求其他选择
答案 0 :(得分:1)
使用cut
对数据进行分箱:
data1$result = cut(data1$score, breaks = c(-Inf, data2$score[-nrow(data2)], Inf), labels = data2$level)
data1
# # A tibble: 6 x 3
# id score result
# <int> <dbl> <fct>
# 1 1 0.9 a
# 2 2 1.9 a
# 3 3 2.9 b
# 4 4 3.9 c
# 5 5 4.9 c
# 6 6 5.9 c