如何使用 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)))]
^^^^^^^^^^^^^^
TRUE
是ignore_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
我正在尝试在 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)))]
^^^^^^^^^^^^^^
TRUE
是ignore_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 argumentcase_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