嗨,我想用一块石头杀死两只鸟。
首先,如果填充了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)
答案 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)