如何使用 lapply(str_subset) 忽略资本

How to Ignore capital using lapply(str_subset)

我正在尝试在 Data.table D 中创建一个新列 (D$NEW),它将 D 的每一行与 Data.table D2 中的整列 (D2$COLUMN1) 使用 str_subset。 (我的数据结构在最下面)

D[,NEW:= lapply(D[,C1],function(x)str_subset(as.character(D2$COLUMN1), x)]

这很好用。 但我也希望 str_subset 忽略大写字母。 但是当我使用 ignore.case(x)

D[,NEW:= lapply(D[,C1],function(x)str_subset(as.character(D2$COLUMN1), ignore.case(x))]

我收到以下错误

## PLEASE use (fixed|coll|regexp)(x, ignore_case=TRUE)

当我使用 ignore_case=TRUE

D[,F:= lapply(D[,V1],function(x) str_subset(as.character(D2$COLUMN1), x, ignore_case=TRUE))]

我收到以下错误:

Error in str_subset(as.character(), x, ignore_case = TRUE) : unused argument (ignore_case = TRUE)

如何在使用此功能时强制忽略大小写..

数据:

D<-data.table(C1=c("a","b","c","d","e","A","B","C"), C2=c(1,2,3,4,5,6,7,8,9,10))


D2<-data.table(COLUMN1=c("a"), COLUMN2=c("b"), COLUMN3=c(1:10))

第一个错误告诉您不能将 ignore.case() 用作函数。第二个错误与 str_subset function 似乎没有任何 ignore_case 参数有关。

使用内联不区分大小写的修饰符(?i):

D[,NEW:= lapply(D[,C1],function(x)str_subset(as.character(D2$COLUMN1), paste0("(?i)",x)))]
                                                                       ^^^^^^^^^^^^^^^^

行内不区分大小写的修饰符 (?i)ignore.case / [=15 的作用相同=] 正在做。它使匹配不区分大小写。参见 more details on inline modifiers at regular-expressions.info。当放在模式的某个地方时,它后面的部分以不区分大小写的方式匹配字符串。因此,通过将它放在模式的开头,您可以使整个模式不区分大小写。

否则,您可以将 TRUE 传递给 regex 函数:

D[,NEW:= lapply(D[,C1],function(x)str_subset(as.character(D2$COLUMN1), regex(x, TRUE)))]
                                                                       ^^^^^^^^^^^^^^

TRUEignore_case参数的值(你可以写成regex(x, ignore_case=TRUE))。在 stri_opts_regex section here 中查看有关您可能使用的选项的更多详细信息。由于某种原因,case_insensitive=TRUE 不起作用。我收到一个错误:

Error in stri_opts_regex(case_insensitive = ignore_case, multiline = multiline, :
   formal argument case_insensitive matched by multiple actual arguments

因此,我不得不将其替换为 ignore_case

结果:

> D
    C1 C2          NEW
 1:  a  1 a,a,a,a,a,a,
 2:  b  2             
 3:  c  3             
 4:  d  4             
 5:  e  5             
 6:  A  6 a,a,a,a,a,a,
 7:  B  7             
 8:  C  8             
 9:  a  9 a,a,a,a,a,a,
10:  b 10