gpt4 book ai didi

r - 避免在 strsplit 列表上循环

转载 作者:行者123 更新时间:2023-12-04 09:37:44 24 4
gpt4 key购买 nike

我有一个向量 v,其中每个条目是由分号分隔的一个或多个字符串(或可能是字符 (0)):

ABC

DEF;ABC;QWE

TRF

character(0)

ABC;GFD

我需要找到包含“ABC”的向量的索引(1、2、5 或逻辑向量 T、T、F、F、T)在“;”上拆分后

我目前正在使用如下循环:

toSelect=integer(0)
for(i in c(1:length(v))){
if(length(v[i])==0) next
words=strsplit(v[i],";")[[1]]
if(!is.na(match("ABC",words))) toSelect=c(toSelect,i)
}

不幸的是,我的向量有 450k 个条目,所以这花费的时间太长了。我更愿意通过做类似的事情来创建一个逻辑向量

toSelect=(!is.na(match("ABC",strsplit(v,";")))

但由于 strsplit 返回一个列表,我无法找到一种方法将 strsplit(v,";") 正确格式化为向量(unlist 不会这样做,因为它会破坏索引)。有人对如何加速此代码有任何想法吗?

谢谢!

最佳答案

使用正则表达式:

v = list("ABC", "DEF;ABC;QWE", "TRF", character(0), "ABC;GFD")
grep("(^|;)ABC($|;)", v)
#[1] 1 2 5

关于r - 避免在 strsplit 列表上循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16427290/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com