【发布时间】:2019-08-20 17:38:34
【问题描述】:
我想知道字符串中的任何元素是否出现在其他字符串中。
我的数据包含数百万行,并且是以下模拟数据的结构:
dt <- data.table(product = c("A", "B", "C", "A,C,E", "A,B", "A,B,C", "D", "A", "B", "A", "A", "A,B,C", "D", "D"),
stock = c("A", "A,B", "A,B,C", "A,B,C,E", "A,B,C,E", "A,B,C,E", "A,B,C,D,E", "A", "A,B", "A,B", "A", "A,B,C", "A,B,C,D", "A,B,C,D"), stringsAsFactors = F)
dt[, product.2 := shift(product, type = "lead")]
dt[, product.3 := shift(product, n = 2, type = "lead")]
> dt
product stock product.2 product.3
1: A A B C
2: B A,B C A,C,E
3: C A,B,C A,C,E A,B
4: A,C,E A,B,C,E A,B A,B,C
5: A,B A,B,C,E A,B,C D
6: A,B,C A,B,C,E D A
7: D A,B,C,D,E A B
8: A A B A
9: B A,B A A
10: A A,B A A,B,C
11: A A A,B,C D
12: A,B,C A,B,C D D
13: D A,B,C,D D <NA>
14: D A,B,C,D <NA> <NA>
从这些数据中我想知道以下几点:
- 如果
product.3中的任何元素(以comma分隔)出现在product.2 - 如果
product.3中的任何元素(由comma分隔)未出现在stock中。 -
product.3中的所有元素(由comma分隔)是否都出现在stock中?
预期的结果是这样的:
> dt
product stock product.2 product.3 outcome1 outcome2 outcome3
1: A A B C FALSE FALSE FALSE
2: B A,B C A,C,E TRUE TRUE FALSE
3: C A,B,C A,C,E A,B TRUE TRUE TRUE
4: A,C,E A,B,C,E A,B A,B,C TRUE TRUE TRUE
5: A,B A,B,C,E A,B,C D FALSE FALSE FALSE
6: A,B,C A,B,C,E D A FALSE TRUE TRUE
7: D A,B,C,D,E A B FALSE TRUE TRUE
8: A A B A FALSE TRUE TRUE
9: B A,B A A TRUE TRUE TRUE
10: A A,B A A,B,C TRUE TRUE FALSE
11: A A A,B,C D FALSE FALSE FALSE
12: A,B,C A,B,C D D TRUE FALSE FALSE
13: D A,B,C,D D <NA> FALSE FALSE FALSE
14: D A,B,C,D <NA> <NA> FALSE FALSE FALSE
此问题是 Stackoverflow 上 this 问题的一部分。
EDIT 08/20/2019:包括第三个预期结果。
【问题讨论】: