如果搜索词在列表中不可用,则忽略或在行中显示NA-R
如果(表搜索)中的任何搜索列表在我输入的列表中不可用,如何打印或显示不可用。在输入中,我有三行,我有三个关键字在这些行中搜索,并告诉我这些行中是否存在关键字。如果当前打印该行,否则打印不可用,如所需输出中所示 我的代码只是打印所有可用的行,但这并没有帮助,因为我需要知道单词丢失的位置如果搜索词在列表中不可用,则忽略或在行中显示NA-R,r,R,如果(表搜索)中的任何搜索列表在我输入的列表中不可用,如何打印或显示不可用。在输入中,我有三行,我有三个关键字在这些行中搜索,并告诉我这些行中是否存在关键字。如果当前打印该行,否则打印不可用,如所需输出中所示 我的代码只是打印所有可用的行,但这并没有帮助,因为我需要知道单词丢失的位置 Table_search <- list("Table 14", "Source Data:","VERSION") Table_ma
Table_search <- list("Table 14", "Source Data:","VERSION")
Table_match_list <- sapply(Table_search, grep, x = tablelist, value = TRUE)
期望输出:
Table 14.1.1.1 (Page 1 of 2)
Source Data: Listing 16.2.1.1.1
NA
@埃文斯
sapply(未列出(表搜索),grepl,x=dat)
实际上,我用这段代码得到了很好的输出,但是我想打印实际的数据,而不是true或false
我认为一个正则表达式就可以做到:
replace(dat,!grepl(粘贴(未列出(表_搜索),collapse=“|”),dat,NA)
#[1]“表14.1.1.1(第1页,共2页)”“源数据:清单16.2.1.1.1”
#[3]NA
使用sapply(,,grep)
的一个问题是grep
返回整数索引,如果不匹配,则返回长度为0的向量。对于sapply
(类不安全函数),这意味着您可能会或可能不会得到整数
向量作为回报。每个返回值可能是长度0(未找到任何内容)或长度1(已找到某些内容),当sapply
发现每个返回值的长度不完全相同时,它会返回一个列表
(因此我在上面的“类不安全”字眼)
当您使用value=TRUE
:将我上面关于“0或1logical
”的推理更改为“0或1character
”,这是同样的问题
因此,我建议grepl
:它应该始终返回logical
,指示是否找到
此外,由于您似乎不需要区分找到了哪些模式,只需“至少找到其中一个”,因此我们可以使用单个正则表达式,并使用正则表达式或操作符|
。这适用于任意长度的表\u搜索
列表
如果您不知何故需要知道找到了哪些模式,那么您可能需要类似以下内容:
sapply(未列出(表搜索),grepl,x=dat)
#表14来源数据:版本
#[1,]对错错错
#[2,]假-真-假
#[3,]错
然后找出如何处理不同的列(每行表示dat
向量中的一个字符串)
一种方法(与我的第一个代码建议相同,尽管效率较低)是
行和(sapply(未列出(表搜索),grepl,x=dat))>0
#[1]真假
其中,逻辑返回值指示是否找到了某些内容。例如,如果您想知道是否找到了两个或多个模式,可以使用rowSums(.)>=2)
资料
Table\u搜索很好的解释。我将添加一条类似的评论,如果你有一个大的Table\u search
向量,你可以将它调整为replace(tablelist,!Reduce(` |``,lappy(Table\u search,grepl,x=tablelist)),NA)
来阻止正则表达式变大和崩溃。嗨,我已经通过一个单独的问题来回答这个问题。请告知。
Table 14.1.1.1 (Page 1 of 2)
Source Data: Listing 16.2.1.1.1
NA