2016-11-02 92 views
0

我在R中的某些数字列遇到此问题。某些列中的一些负值被括在括号中,列被转换为因子。删除R中的括号并将值转换为负数

如何删除R中的括号并将值设为负值?例如。 “(265)”到-265

如何在R中使用gsub函数来执行此操作?如果有其他方法可用,请建议。

回答

2

万一有别的事情上有数字的东西:

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

这里是一个另类。正则表达式匹配的值以圆括号开头和结尾,并且包含一个或多个数字字符,前面的中间组(数字字符)返回负号。然后将整个批次转换为数字:

as.numeric(gsub("^\\(([1-9]+)\\)$","-\\1",x))