【问题标题】:R find all indexes of character matches in a list of stringsR在字符串列表中查找字符匹配的所有索引
【发布时间】:2019-07-21 11:50:24
【问题描述】:

我有一个这样的 df(大约 800,000 行)

 #    str

   # 1  .||.

   # 2  .

   # 3  .|..

   # 4  ..

我想要一个这样的新数据框(用.记录每个字符串中的位置)(对不起列的格式)

#   str     loc

   # 1  .||.    1 4

   # 2  .       1

   # 3  .|..    1 3 4

   # 4  ..      1 2

我可以使用gregexpr(".", str, fixed = TRUE) 获取位置,但我不知道如何获取gregexpr 输出的第一部分,没有三个属性部分。稍后我将在其他计算中使用位置向量。由于gregexpr 是矢量化的,我不想使用循环来执行此操作,因为这会花费太长时间。我认为这个问题在之前的问题中一定已经解决了,但我找不到解决方案。另外,如果有完全不同的方法来处理这个问题,请告诉我。

【问题讨论】:

  • 请使用dput 显示示例尝试使用library(stringr);str_locate_all(".||.", fixed("."))[[1]][,1]
  • unlist 适用于一行,但应用于整个列表时,它不会保留行信息。
  • str_locate_all 似乎工作正常。似乎也应该有一个简单的 gregexpr 解决方案。

标签: r string indexing match


【解决方案1】:

这是一个例子。这是你的意思吗?

S = c("appleap", "tapppapp")
P = "ap"

lapply(gregexpr(P, S), function(x) as.vector(x))
#[[1]]
#[1] 1 6

#[[2]]
#[1] 2 6

【讨论】:

  • 谢谢!这也很好。比较大约 30,000 条记录的 str_locate_all 和 lapply 方法,我发现 > start_time xxx end_time end_time - start_time 时间差 0.03490591 秒 > > start_time xxx end_time end_time - start_time 时间差 0.2782559 秒 > 只要 lapply 方法不是 O(n2),它也应该适用于更大的数据集。我需要检查时间复杂度
  • 所以我检查了时间复杂度。 str_locate_all 是 O(n),lapply 是 O(n2)。
猜你喜欢
  • 2014-08-21
  • 1970-01-01
  • 2012-05-29
  • 1970-01-01
  • 2023-01-06
  • 2021-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多