regex 在R中的data.table的j位置使用函数

0md85ypi  于 2023-05-30  发布在  其他
关注(0)|答案(1)|浏览(107)

我在使用一个函数时遇到了麻烦,它的参数是同一个data. table的另一列。

pattern.1 <- regex("(?<=a)(.*)(?=c)")
  
DT <- data.table(x = c("abc", "adc", "abd"))
DT[, y := str_match(x, pattern.1)[1, 2]]

DT

例如,上面的代码给予yield:

x y
1: abc b
2: adc b
3: abd b

但预期的结果是:

x y
1: abc b
2: adc d
3: abd NA

有没有人知道如何解决这个问题,tks!

eqqqjvef

eqqqjvef1#

您可以按以下方式解决您的问题:

DT[, y := str_extract(x, pattern.1)]
 # or (using str_match)
 DT[, y := str_match(x, pattern.1)[, 1]]

        x      y
   <char> <char>
1:    abc      b
2:    adc      d
3:    abd   <NA>
备注
  1. str_match返回矩阵而不是向量;但在你的问题中,你会想得到一个向量
    1.在结果中,y列中的所有行都得到b,因为您选择了str_match返回的矩阵第二列的第一个元素,然后将其回收。您应该选择 all 行和第一列(str_match(x, pattern.1)[, 1])。
    1.函数str_extract更适合您的问题,因为它返回一个向量(见下文)

相关问题