【问题标题】:Find indices of vector elements in a another vector在另一个向量中查找向量元素的索引
【发布时间】:2014-07-14 05:59:52
【问题描述】:

这扩展了a previous question I asked。 我有 2 个向量:

a <- c("a","b","c","d","e","d,e","f")
b <- c("a","b","c","d,e","f")

我从a 中创建了b,方法是消除a 中包含在其他以逗号分隔的a 中的元素(例如,a 中的“d”和“e”包含在“d,e”,因此在b 中只表示“d,e”)。

我正在寻找一种在a 和b 的元素索引之间进行映射的有效方法。

具体来说,我想要一个b 的长度列表,其中每个元素都是一个向量,其中a 中的元素的索引映射到该b 元素。

对于这个例子,输出应该是:

list(1, 2, 3, c(4,5,6), 7)

【问题讨论】:

  • 如果您在上一个问题中从my answer 跟进,您可以直接使用lapply(L, function(x) which(grepl(x, a)))。

标签: r list vector


【解决方案1】:

从my answer at your previous question修改轻微,试试:

a <- c("a","b","c","d","e","d,e","f")
b <- c("a","b","c","d,e","f")
B <- setNames(lapply(b, gsub, pattern = ",", replacement = "|"), seq_along(b))

lapply(B, function(x) which(grepl(x, a)))
# $`1`
# [1] 1
# 
# $`2`
# [1] 2
# 
# $`3`
# [1] 3
# 
# $`4`
# [1] 4 5 6
# 
# $`5`
# [1] 7

【讨论】:

  • 非常感谢。有没有办法更有效地实现这一目标?我的数据尺寸很大,并且 lapply 需要很长时间。
  • @user1701545,这可能不是lapply 可能需要很长时间,而是必须多次使用grep/grepl。我建议您尝试制定一个更全面的问题,试图展示您真正想要解决的问题,并且您可能能够获得更合适的建议。
  • 非常感谢。我听从了您的建议,并在新帖子中发布了整个“故事”:stackoverflow.com/questions/24730992/…
猜你喜欢
  • 2021-07-28
  • 2014-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多