【发布时间】:2022-01-16 18:21:27
【问题描述】:
假设我有下表。我想找到所有id,其中A直接或间接跟在B之后。
A->B 是id 1 的直接序列,而A->B 是 id 2、id 3 和 id 4 的间接序列。
have <- tibble(id=c(rep(1,2),rep(2,4),rep(3,3),rep(4,4))
,sequence=c('A','B','A','D','C','B','D','A','C','B','D','A','B'))
have
# A tibble: 13 × 2
id sequence
<dbl> <chr>
1 1 A
2 1 B
3 2 A
4 2 D
5 2 C
6 2 B
7 3 D
8 3 A
9 3 C
10 4 B
11 4 D
12 4 A
13 4 B
对于A->B direct sequences,我执行以下操作。但我不认为相同的逻辑适用于间接序列,除非我在连接上使用正则表达式。
have %>% group_by(id) %>%
dplyr::mutate(process_seq = paste(lag(sequence), '->', sequence)) %>%
dplyr::filter(process_seq == 'A -> B')
want
# A tibble: 13 × 2
id sequence-type
<dbl> <chr>
1 1 direct
2 2 indirect
3 3 indirect
4 4 indirect
【问题讨论】:
-
请详细说明“间接”的确切含义。请在您的问题中添加所需输出的表格。
-
你想达到什么目的?您是否想要指示 ID 在 A 和 B 之间是否有直接/间接/无链接?还是你想要别的?
-
@djas,是的,正确,对于每个
ID,我想知道它是否有从A到B的字符串转换,直接(如A后紧跟@987654336 @) 或间接 (A followed by some other strings and eventually B)。反向转换 (B->A) 不感兴趣。但我想如果我能解决这部分,我更容易过滤直接循环转换,如(A->B->A)或间接循环(A->...->B->...->A)