如何拆分基于R data.frame列的正则表达式条件

Ant*_*tti 2 regex r dataframe

我有一个data.frame,我想根据正则表达式将其中一列拆分为两列.更具体地说,字符串在括号中有一个后缀,需要将其提取到它自己的列中.

所以我想从这里得到:

dfInit <- data.frame(VAR = paste0(c(1:10),"(",c("A","B"),")"))
Run Code Online (Sandbox Code Playgroud)

到这里:

dfFinal <- data.frame(VAR1 = c(1:10), VAR2 = c("A","B"))
Run Code Online (Sandbox Code Playgroud)

G. *_*eck 6

1)gsubfn read.pattern包中的gsubfn :: read.pattern可以做到这一点.与常规rexpression的括号部分的匹配被视为字段:

library(gsubfn)
read.pattern(text = as.character(dfInit$VAR), pattern = "(.*)[(](.*)[)]$")
Run Code Online (Sandbox Code Playgroud)

赠送:

   V1 V2
1   1  A
2   2  B
3   3  A
4   4  B
5   5  A
6   6  B
7   7  A
8   8  B
9   9  A
10 10  B
Run Code Online (Sandbox Code Playgroud)

2)sub另一种方式是使用sub:

data.frame(V1=sub("\\(.*", "", dfInit$VAR), V2=sub(".*\\((.)\\)$", "\\1", dfInit$VAR))
Run Code Online (Sandbox Code Playgroud)

给出相同的结果.

3)read.table此解决方案不使用正则表达式:

read.table(text = as.character(dfInit$VAR), sep = "(", comment = ")")
Run Code Online (Sandbox Code Playgroud)

给出相同的结果.