r - 根据整数值查找表

标签 r dplyr lookup

考虑以下数据框:

lookup <- 
data.frame(
level = 1:5,
points_needed = c(150, 250, 420, 580, 620)
)

lookup

  level points_needed
1     1           150
2     2           250
3     3           420
4     4           580
5     5           620

现在考虑以下观察结果:

data <-
data.frame(
person_name = c("Bob", "Bob", "Bob", "Jim", "Jim"),
match = c(1, 2, 3, 1, 2),
total_points = c(100, 300, 430, 200, 600)
)

data
  person_name match total_points
1         Bob     1          100
2         Bob     2          300
3         Bob     3          430
4         Jim     1          200
5         Jim     2          600

我想在数据中创建新列。此列将指示 person_name 的级别 - 这会根据与 lookup 表相关的 total_points 进行更改。期望的结果:

data
  person_name match total_points level
1         Bob     1          100     0
2         Bob     2          300     2
3         Bob     3          430     3
4         Jim     1          200     1
5         Jim     2          600     5

我无法在此处使用连接,因为没有任何可连接的内容。有什么建议吗?

最佳答案

这使用findInterval,不需要使用实际级别,因为它是排序且连续的

data$level <- findInterval(data$total_points, lookup$points_needed)

> data
  person_name match total_points level
1         Bob     1          100     0
2         Bob     2          300     2
3         Bob     3          430     3
4         Jim     1          200     1
5         Jim     2          600     4

请注意,最后一行的级别似乎是 4

向查找表添加文本标签

lookup <- 
  data.frame(
    level = 1:5,
    points_needed = c(150, 250, 420, 580, 620),
    label = c("blue", "green", "yellow", "orange", "red")
  )

data$level <- findInterval(data$total_points, lookup$points_needed)
data$level2[data$level > 0] <- as.character(lookup$label[data$level])

> data
  person_name match total_points level level2
1         Bob     1          100     0   <NA>
2         Bob     2          300     2  green
3         Bob     3          430     3 yellow
4         Jim     1          200     1   blue
5         Jim     2          600     4 orange

如果标签未保存为因素,则不需要使用 as.character

关于r - 根据整数值查找表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60042955/

相关文章:

r - 使用 json 路径对 googlesheets4 进行非交互式身份验证

r - 如何在 R 中迭代向量并替换值

excel - 如果日期介于两个日期之间,则查找一个值

java - 计数语句 : Database (like h2) vs. Lucene vs.?

r - 使用一个函数和一个参数生成两个序列

正则表达式替换 R 中字符串的部分/组

r - 从一个函数中加载一个包

r - 如何在整列的特定位置添加数值?

r - 根据值和分隔符拆分数据框中的所有列

r - 在 r 中安装旧版本的 dplyr (0.12)