我有一个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)
但我得到的只是所有真值.有什么建议?
假设值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)
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)
只需添加可用于此目的的工具,另一个是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)
| 归档时间: |
|
| 查看次数: |
24252 次 |
| 最近记录: |