gpt4 book ai didi

r - 如何选择存在所有序列的所有 id 行?

转载 作者:行者123 更新时间:2023-12-04 02:34:23 25 4
gpt4 key购买 nike

我有一个如下所示的数据表:

DT1 <- data.table(
id=c(1,1,1,2,2,2,1,1),
sensor_id=c(1,2,3,1,2,3,2,3),
time=c("2017-01-01 00:00:05","2017-01-01 00:06:35","2017-01-01 00:23:44","2017-01-02 22:00:20","2017-01-02 22:01:09","2017-01-02 22:28:02","2017-01-03 22:23:01","2017-01-03 22:50:52")
)

由此,我想选择所有 customer_id 行,在这种情况下,这些行具有传感器 ID 的所有序列 (1,2,3)。

所以我想像下面这样标记这些:

DT1 <- data.table(
id=c(1,1,1,2,2,2,1,1),
sensor_id=c(1,2,3,1,2,3,2,3),
time=c("2017-01-01 00:00:05","2017-01-01 00:06:35","2017-01-01 00:23:44","2017-01-02 22:00:20","2017-01-02 22:01:09","2017-01-02 22:28:02","2017-01-03 22:23:01","2017-01-03 22:50:52"),
group=c(1,1,1,2,2,2,3,3),
seq_boolean=c(1,1,1,1,1,1,0,0)
)

我可以确定该行是否具有所有序列。一个 id 可以出现多次,也可以不包含所有序列。

为此,我首先尝试了以下分组

DT1[,group:=rleid(id),by=list(id,rleid(sensor_id))]

但这只是将所有组合为一个。我不确定我在哪里做错了。感谢您的帮助。

编辑我也可以有如下格式的数据表。

DT1 <- data.table(
id=c(1,2,1,2,1,2,1,1),
sensor_id=c(1,1,2,2,3,3,2,3),
time=c("2017-01-01 00:00:05","2017-01-01 00:06:35","2017-01-01 00:23:44","2017-01-02 00:00:20","2017-01-02 00:35:09","2017-01-02 00:28:02","2017-01-03 00:45:01","2017-01-03 00:50:52")
)

这里的组由 sensor_id 定义。sensor_id 1 是 session 的开始,sensor_id 2 是中间 session ,sensor_id 3 是 session 的结束。一个 ID 可以有多个 session ,一些传感器可能无法捕获 ID。所以我的目的是识别所有 3 个传感器 ID 捕获的所有 session ,并查看捕获了多少。

最佳答案

我们可以检查每个组是否都存在所有 uniq_sensor

uniq_sensor <- unique(DT1$sensor_id)
DT1[, seq_boolean := +(all(uniq_sensor %in% sensor_id)), rleid(id)]
DT1

# id sensor_id time seq_boolean
#1: 1 1 2017-01-01 00:00:05 1
#2: 1 2 2017-01-01 00:06:35 1
#3: 1 3 2017-01-01 00:23:44 1
#4: 2 1 2017-01-02 22:00:20 1
#5: 2 2 2017-01-02 22:01:09 1
#6: 2 3 2017-01-02 22:28:02 1
#7: 1 2 2017-01-03 22:23:01 0
#8: 1 3 2017-01-03 22:50:52 0

我们还可以计算每组唯一传感器的长度:

DT1[, seq_boolean := +(uniqueN(sensor_id) == length(uniq_sensor)), rleid(id)]

编辑

对于我们想要确保 sensor_id 以完全相同的顺序出现的附加条件,我们可以这样做:

library(dplyr)

DT1 %>%
group_by(id) %>%
group_by(grp = cumsum(c(TRUE, diff(sensor_id) <= 0)), .add = TRUE) %>%
#Use add = TRUE for old dplyr < 1.0.0
mutate(seq_boolean = +(all(uniq_sensor %in% sensor_id)))

关于r - 如何选择存在所有序列的所有 id 行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62528334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com