使用模式向量通过grep在另一列上创建新列值

时间:2018-01-25 02:54:01

标签: r

我有一个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

1 个答案:

答案 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

产生相同的结果。