说我有一个这样的字符串
foo10.png
我该如何清洁它,以便仅保留“保持”状态。此外,如何将其应用于整个列。
我想将字符串保留在最后一个冒号之后,单个单元格中可以有1到4个冒号
谢谢
答案 0 :(得分:2)
您可以使用
sub(".*:(.*)", "\\1", "Delete:Delete:Delete:Keep")
# [1] "Keep"
以及类似的列:
df$col <- sub(".*:(.*)", "\\1", df$col)
工作原理如下:.*
匹配最后一个:
之前的所有内容,原因是贪婪匹配。然后(.*)
捕获最后一个:
之后的所有内容,这就是我们的最终值。
答案 1 :(得分:1)
您也可以使用strsplit
# d is your column
d <- c("Delete:Delete:Delete:Keep","Delete:Delete:Delete:Keep","Delete:Delete:Delete:Keep")
sapply(d, function(x) tail(unlist(strsplit(x, ":")), 1), USE.NAMES = F)
[1] "Keep" "Keep" "Keep"
答案 2 :(得分:1)
或者,
x = "Delete:Delete:Delete:Keep"
sub(".*:(?=[^:]+$)", "", x, perl = TRUE)
或
sub(".*?(?=[^:]+$)", "", x, perl = TRUE)
regex概念:
懒惰的量词,积极的前瞻性