【问题标题】:data.table - check if one column is in another (list) columndata.table - 检查一列是否在另一(列表)列中
【发布时间】:2017-01-17 20:34:18
【问题描述】:

我有一个数据表,其中有一列包含列表。我想检查列表列中是否存在另一列。

library(data.table)
dt <- data.table("a" = 1:3, "b" = list(1:2, 3:4, 5:6))

我试过了:

dt[, is_a_in_b := a %in% b]
dt
#    a   b is_a_in_b
# 1: 1 1,2     FALSE
# 2: 2 3,4     FALSE
# 3: 3 5,6     FALSE

它没有给出正确的结果。所需的表将是

dt
#    a   b is_a_in_b
# 1: 1 1,2      TRUE
# 2: 2 3,4     FALSE
# 3: 3 5,6     FALSE

【问题讨论】:

标签: r data.table


【解决方案1】:

您可以使用mapply 函数并将函数%in% 应用于两个向量:ab。实际上,它需要一对向量(列表)并为每个索引ix 生成a[ix] %in% b[[ix]] 的结果。

dt[, is_a_in_b := mapply('%in%', a, b)]

> dt
   a   b is_a_in_b
1: 1 1,2      TRUE
2: 2 3,4     FALSE
3: 3 5,6     FALSE

【讨论】:

  • 编辑到mapply,因为它将结果放到原子上,无需unlist。希望你不要介意。
  • 另一个选项Vectorize(`%in%`)(a,b)
猜你喜欢
  • 2022-12-12
  • 1970-01-01
  • 1970-01-01
  • 2019-12-11
  • 1970-01-01
  • 1970-01-01
  • 2014-01-30
  • 2012-10-08
  • 1970-01-01
相关资源
最近更新 更多