我有一个data.table
格式的数据集,看起来像这样:
ID time.s time.e
1 1 2
2 1 4
3 2 3
4 2 4
我想查看值1是否在time.s
和time.e
内,以便最终结果看起来像
[1] TRUE TRUE FALSE FALSE
我该怎么做?我试过用
a[1 %in% seq(time.s, time.e)]
但我得到的都是真值。有什么建议吗?
答案 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)