在 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"
作为某个操作的输出,我有以下包含 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"