我在R中遇到了一些数字列的问题。某些列中的负值采用括号表示,列转换为因子。
如何删除R中的括号并将值设为负值?例如。 “(265)”至-265
如何在R中使用gsub函数来执行此操作?如果有其他方法,请建议。
答案 0 :(得分:3)
以防万一还有其他数字:
convert.brackets <- function(x){
if(grepl("\\(.*\\)", x)){
paste0("-", gsub("\\(|\\)", "", x))
} else {
x
}
}
x <- c("123", "(456)", "789")
sapply(x, convert.brackets, USE.NAMES = F)
[1] "123" "-456" "789"
否则只是:
paste0("-", gsub("\\(|\\)", "", x))
答案 1 :(得分:1)
这是另一种选择。正则表达式匹配在以圆括号开头和结尾的值上,并且在两者之间包含一个或多个数字字符,返回中间组(数字字符),前面带有减号。然后将整个批次转换为数字:
as.numeric(gsub("^\\(([1-9]+)\\)$","-\\1",x))