使用dplyr和R基于键表将值转换为键

时间:2018-07-27 18:40:37

标签: r dplyr

在下面,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也许可以做到这一点,但我也想寻求其他选择

1 个答案:

答案 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