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

时间:2016-07-22 08:25:29

标签: regex r data.table lapply substr

我正在尝试在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)

1 个答案:

答案 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)))]
                                                                       ^^^^^^^^^^^^^^

TRUEignore_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