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

aka*_*h87 10 r

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

ID     time.s     time.e
1       1         2
2       1         4
3       2         3
4       2         4
Run Code Online (Sandbox Code Playgroud)

我想检查值1是否在内time.s,time.e以便最终结果如下

[1] TRUE TRUE FALSE FALSE
Run Code Online (Sandbox Code Playgroud)

我该怎么做?我试过用

 a[1 %in% seq(time.s, time.e)]
Run Code Online (Sandbox Code Playgroud)

但我得到的只是所有真值.有什么建议?

G. *_*eck 8

假设值ID是唯一的:

DT[, list(OK = 1 %in% seq(time.s, time.e)), by = ID]
Run Code Online (Sandbox Code Playgroud)

给予;

   ID    OK
1:  1  TRUE
2:  2  TRUE
3:  3 FALSE
4:  4 FALSE
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,这仅适用于离散(单一?我在这里漏掉了这个词,但我希望其含义能够表达出来)时间值...例如 2 在 seq(1, 3) 中,但 2.2 不是。当然,我们可以指定 seq() 的步骤,但这只能解决这么多。 (2认同)

aka*_*h87 6

此外,这有效:

with(dat, time.s <= 1 & time.e >= 1)
Run Code Online (Sandbox Code Playgroud)


sbh*_*bha 5

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
Run Code Online (Sandbox Code Playgroud)


Lal*_*zia 5

只需添加可用于此目的的工具,另一个是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)
Run Code Online (Sandbox Code Playgroud)