我正在尝试在Data.table D中创建一个新列(D $ NEW),它使用str_subset将D的每一行与Data.table D2中的整列(D2 $ COLUMN1)相匹配。 (我的数据结构在底部)
<select [(ngModel)]="selected" (ngModelChange)="onChange()">
<option *ngFor="let d of data" [ngValue]="d">
{{d.name}}
</option>
</select>
这很好用。 但我也希望str_subset忽略大写情况。 但是当我使用ignore.case(x)
时D[,NEW:= lapply(D[,C1],function(x)str_subset(as.character(D2$COLUMN1), x)]
我收到以下错误
D[,NEW:= lapply(D[,C1],function(x)str_subset(as.character(D2$COLUMN1), ignore.case(x))]
当我使用ignore_case = TRUE
时## PLEASE use (fixed|coll|regexp)(x, 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)
答案 0 :(得分:1)
第一个错误告诉您不能使用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
/ ignore_case
执行的操作相同。它使匹配不区分大小写。见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
不起作用。我收到了一个错误:
stri_opts_regex(case_insensitive = ignore_case, multiline = multiline,
中的错误:
正式参数case_insensitive
与多个实际参数相匹配
所以,我不得不用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