检查一个值是否在一个范围内?

时间:2017-01-16 19:10:46

标签: r

我有一个data.table格式的数据集,看起来像这样:

ID     time.s     time.e
1       1         2
2       1         4
3       2         3
4       2         4

我想查看值1是否在time.stime.e内,以便最终结果看起来像

[1] TRUE TRUE FALSE FALSE

我该怎么做?我试过用

 a[1 %in% seq(time.s, time.e)]

但我得到的都是真值。有什么建议吗?

5 个答案:

答案 0 :(得分:7)

假设ID的值是唯一的:

DT[, list(OK = 1 %in% seq(time.s, time.e)), by = ID]

给予;

   ID    OK
1:  1  TRUE
2:  2  TRUE
3:  3 FALSE
4:  4 FALSE

答案 1 :(得分:6)

此外,这也有效:

with(dat, time.s <= 1 & time.e >= 1)

答案 2 :(得分:4)

这是一个dplyr选项,以防有人偶然发现此问题:

library(dplyr)
value = 1
df %>% 
  mutate(ok = value >= time.s & value <= time.e)

  ID time.s time.e    ok
1  1      1      2  TRUE
2  2      1      4  TRUE
3  3      2      3 FALSE
4  4      2      4 FALSE

答案 3 :(得分:1)

这是另一个。

library(TeachingDemos)
a[time.s %<=% 1 %<=% time.e]

为此加载一个库可能有些过分,但语法非常直观。

答案 4 :(得分:1)

只需添加可用于此目的的工具,另一个就是data.table::between

data.frame <- data.frame(ID = 1:4,
                         time.s = c(1,1,2,2),
                         time.e = c(2,4,3,4))

data.table::between(1, data.frame$time.s, data.frame$time.e)