我有一个数字元素的向量和一个包含两列的数据框,这两列定义了区间的起始点和终止点。数据框中的每一行都是一个区间。我想找出向量中的每个元素属于哪个区间。
以下是示例数据:
# Find which interval that each element of the vector belongs in
library(tidyverse)
elements <- c(0.1, 0.2, 0.5, 0.9, 1.1, 1.9, 2.1)
intervals <- frame_data(~phase, ~start, ~end,
"a", 0, 0.5,
"b", 1, 1.9,
"c", 2, 2.5)
对于那些反对 tidyverse 的人,这里提供同样的示例数据:
elements <- c(0.1, 0.2, 0.5, 0.9, 1.1, 1.9, 2.1)
intervals <- structure(list(phase = c("a", "b", "c"),
start = c(0, 1, 2),
end = c(0.5, 1.9, 2.5)),
.Names = c("phase", "start", "end"),
row.names = c(NA, -3L),
class = "data.frame")
这是一种做法:
library(intrval)
phases_for_elements <-
map(elements, ~.x %[]% data.frame(intervals[, c('start', 'end')])) %>%
map(., ~unlist(intervals[.x, 'phase']))
以下是输出结果:
[[1]]
phase
"a"
[[2]]
phase
"a"
[[3]]
phase
"a"
[[4]]
character(0)
[[5]]
phase
"b"
[[6]]
phase
"b"
[[7]]
phase
"c"
但是我正在寻找一种更简单的方法,打字更少。我在相关问题中看到了findInterval
,但我不确定如何在这种情况下使用它。
dput
仅需要基础R,非常方便(对于接收数据的人以及共享数据的人)。 - Roland