在 gsub 函数中的 R 中出现意外结果,而不是替换

Unexpected outcome, not replacing, in R out of a gsub function

作为某个操作的输出,我有以下包含 729 个观察值的数据框。

> head(con)
              Connections
1  r_con[C3-C3,Intercept]
2  r_con[C3-C4,Intercept]
3 r_con[C3-CP1,Intercept]
4 r_con[C3-CP2,Intercept]
5 r_con[C3-CP5,Intercept]
6 r_con[C3-CP6,Intercept]

可以看出,要删除的模式是除电极信息对之外的所有内容,例如,在第一次观察中,这将是 C3-C3。现在,这是我对这个问题的看法,我希望删除所有内容的数据框。如果我没记错(可能是),则正则表达式语法没问题,而且根据我的理解,我相信 fixed=TRUE 也是必要的。但是,我不明白 R 的输出。当我期望模式不会被任何改变时 "" 它 returns 这个输出,这对我来说没有意义。

> gsub("r_con\[\,Intercept\]\","",con,fixed=TRUE)

[1] "3:731"

我相信这对于专业程序员来说可能是一个愚蠢的问题,而我远非如此,任何见解将不胜感激。

[更新解决方案]

感谢蒂姆和本,我意识到我使用了错误的正则表达式语法和错误的来源,这让我明白了:

con2 <- sub("^r_con\[([^,]+),Intercept\]", "\1", con$Connections)

我认为您的问题是您在 sub 调用中访问“con”。另外,正如我上面的用户指出的那样,您可能不想使用 sub.

我假设您的数据是一致的,即 con$Connections 中的字符串或多或少遵循相同的模式。然后,这有效:

我已经设置了这个例子:

con <- data.frame(Connections = c("r_con[C3-C3,Intercept]", "r_con[C3-CP1,Intercept]"))
library(stringr)
f <- function(x){
  part <- str_split(x, ",")[[1]][1]
  str_sub(part, 7, -1)
}

f(con$Connections[1])
sapply(con$Connections, f)

sub 函数不是这样工作的。一种可行的方法是捕获您想要的数量,然后使用此捕获组作为替代:

x <- "r_con[C3-C3,Intercept]"
term <- sub("^r_con\[([^,]+),Intercept\]", "\1", x)
term

[1] "C3-C3"