我有一个data.frame
,我想在一列Name
中搜索,以便在另一列中创建一个包含搜索模式的新值。我可以逐一让这个工作,但我想知道是否有办法更优雅地做到这一点。我可以制作一个矢量intensities = c("1mW", "5mW", and "10mW")
模式,然后有另一个替换矢量吗? (在这种情况下相同的值)。
Name Intensity
file-1mW 1mW
file-1mW 1mW
file-5mW 5mW
file-10mW 10mW
file-1mW 1mW
答案 0 :(得分:3)
您可以使用stringr::str_extract
。正则表达式\w+$
将从字符串中取出最后一个字,在这种情况下,字符串由“ - ”字符分隔。
library(dplyr)
library(stringr)
df <- read.table(text = "
Name Intensity
file-1mW 1mW
file-1mW 1mW
file-5mW 5mW
file-10mW 10mW
file-1mW 1mW" , header = TRUE, stringsAsFactors = FALSE)
df %>% mutate(new = str_extract(Name, "\\w+$"))
# Name Intensity new
# 1 file-1mW 1mW 1mW
# 2 file-1mW 1mW 1mW
# 3 file-5mW 5mW 5mW
# 4 file-10mW 10mW 10mW
# 5 file-1mW 1mW 1mW
另一种方法可能是使用破折号分割字符串并获取第二个元素。
df %>% mutate(new = str_split(Name, "-")[[1]][2])
df %>% mutate(new = strsplit(Name, "-")[[1]][2]) # the base option
产生相同的结果。