获取 R 中特定模式后的字符 - 正则表达式

Get the characters after a certain pattern in R - regex

我有一个包含一列的数据框:

df <- data.frame(cat = c("c(\\"BPT\\", \"BP\")", "c(\"BP2\", \"BP\")", "c(\"BPT\", \"BP\")", "c(\"CN\", \"NC\")"))
df$cat <- as.character(df$cat)
df$cat

如何提取出现在c(\"之后的字符,有时只有一个反斜线,有时有2个。同样的字符,有时字符是2个,有时是3个。例如BP2,BP等等

到目前为止我已经尝试过:

substr(x = df$cat, start = 4, stop = 6)

但这会导致:

 "\"BP" "BP2"  "BPT"  "CN\""

我只希望输出显示

"BPT" "BP2"  "BPT"  "CN"

您可以使用

df <- data.frame(cat = c("c(\\"BPT\\", \"BP\")", "c(\"BP2\", \"BP\")", "c(\"BPT\", \"BP\")", "c(\"CN\", \"NC\")"))
df$cat <- as.character(df$cat)
unlist(lapply(gsub('\', '', df$cat, fixed=TRUE), function(x) eval(parse(text=x))[[1]]))
## => [1] "BPT" "BP2" "BPT" "CN" 

参见R demo online

备注

  • gsub('\', '', df$cat, fixed=TRUE) 删除所有反斜杠。如果您只打算删除 ".
  • 之前的反斜杠,则可以使用 gsub('\\"', '"', df$cat, fixed=TRUE)
  • eval(parse(text=x))[[1]]解析向量和returns第一项
  • lapply 帮助遍历您拥有的全部数据。参见 Using sapply and lapply