根据整数值查找 table
Look up table based on integer values
考虑以下数据框:
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
的水平 - 这根据 total_points
相对于 lookup
table 的变化而变化。期望的结果:
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
正在为查找添加文本标签table
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
考虑以下数据框:
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
的水平 - 这根据 total_points
相对于 lookup
table 的变化而变化。期望的结果:
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
正在为查找添加文本标签table
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