使用单个和多个模式的grepl

时间:2016-09-14 20:31:23

标签: r mapply grepl

我正在将列表中的模式与数据帧进行比较。在某些情况下,模式可能是串联的字符串(如下面的LIST所示)。如果任何元素,无论是在串联字符串中还是单个字符串都在数据帧比较中,我想要一个TRUE值。我知道grep的问题和>的模式1,但也许有另一种方式。我的代码适用于单个模式,但如果感兴趣的模式不是连接字符串中的第一个元素,则显示为FALSE。

LIST

structure(list(L29 = 11, S14 = 3, S2 = 1, S7 = 2, S71 = c(4, 
8, 9, 10), S91 = c(6, 7)), .Names = c("L29", "S14", "S2", "S7", 
"S71", "S91"))

比较

 structure(list(L29 = c(11, 11, 11, 11, 11, 11), S14 = c(3, 3, 
3, 3, 3, 3), S2 = c(1, 1, 1, 1, 1, 1), S7 = c(2, 2, 2, 2, 2, 
2), S71 = c(4, 8, 9, 10, 15, 16), S91 = c(6, 7, 6, 7, 6, 7)), .Names = c("L29", 
"S14", "S2", "S7", "S71", "S91"), row.names = c(NA, -6L), class = "data.frame")

我的代码:

output <- as.data.frame(mapply(grepl, LIST, Compare 
), MoreArgs = list(pattern = "^[[:alnum:]]$",
                   ignore.case = TRUE))

期望的输出

LIST将循环通过比较,对于S71,值将为TRUE,TRUE,TRUE,TRUE,FALSE,FALSE。 LIST的S71变量是c(4,8,9,10)的串联字符串,因此TRUE值对应于Compare数据帧中的那些行,但这些值与Compare的行5和6的15和16不匹配,因此FALSE值。对于S91,所有值都为TRUE,因为LIST中存在c(6,7)的连接值。

0 个答案:

没有答案