文本提取并添加到新列

时间:2018-01-26 13:58:26

标签: r regex

嗨,我想用一块石头杀死两只鸟。

首先,如果填充了col b,则将其设置为new(此处没有问题);其次,如果col b为空,则提取字符串的一部分 - 在Task之后和空格之前的所有内容并输入到" new"。

a <- c("11-010 Bla", "TASK 21 MMM", "TASK 03-11-11 Hah")
b <- c("11-010","","")
new <- c("","","")

df <- data.frame(a,b,new)


a                 b          new
11-010 Bla        11-010    
TASK 21 MMM
TASK 03-11-11 Hah

输出:

a                 b          new
11-010 Bla        11-010     11-010   
TASK 21 MMM                  21       
TASK 03-11-11 Hah            03-11-11

我尝试使用下面的任务编号,但我无法为其添加空间。任务编号后面跟着空格。

gsub("^[^_]*TASK|\\.[^.]*\\s$", "", df$a)
sub(".*?TASK=(.*?)' '.*", "\\1", df$a)

2 个答案:

答案 0 :(得分:2)

如果b是一个空字符串,您可以捕获“TASK”与具有以下regex的空格之间的所有内容:

sub(".*TASK ([^ ]+) .+", "\\1", df$a[df$b==""])
# [1] "21"       "03-11-11"

\\1允许捕获正则表达式中括号之间的内容,在本例中为[^ ]+:除了空格之外的任何内容,一次或多次。

您可以将其直接放在df中:

df$new[df$b==""] <- sub(".*TASK ([^ ]+) .+", "\\1", df$a[df$b==""])
#                  a      b      new
#1        11-010 Bla 11-010   11-010
#2       TASK 21 MMM              21
#3 TASK 03-11-11 Hah        03-11-11

答案 1 :(得分:0)

  1                      (BLOB)   
  2                      (BLOB)      
  3                      (BLOB)