I have dataset, which negative value is presented with a bracket around the number i.e. (10)==-10
, it is in csv format, how can I process it so that R will inte开发者_如何学Crpret the (10)
as -10
? Thank you.
UPDATE
I know I can work it out by replacing (
as -
, remove )
, and use as.numeric
afterwards, but is there a more elegant way for this issue?
If you create an "as.acntngFmt" method for the accounting format, you can read (or perhaps re-read with a text connection using colClasses("acnt").
setClass("acntngFmt")
# [1] "acntngFmt"
setAs("character", "acntngFmt",
function(from) as.numeric( gsub("\\)", "", gsub("\\(", "-", from))))
Input <- "A, B, C
(1.76), 1%, 3.50€
2.00, 2%, 4.77€
3.000, 3% , €5.68"
DF <- read.csv(textConnection(Input), header = TRUE,
colClasses = c("acntngFmt", "character", "character"))
str(DF)
'data.frame': 3 obs. of 3 variables:
$ A: num -1.76 2 3
$ B: chr "1%" "2%" "3%"
$ C: chr "3.50€" "4.77€" "€5.68"
If you know the surrounding parentheses will be the only ones in the unit, you can create a function to deal with them:
test <- c(10, "(10)", 5)
negative_paren <- function(vec){
#the backspace escapes the special "(" character
vec <- gsub("\\(","-",vec)
vec <- gsub("\\)","",vec)
vec <- as.numeric(vec)
return(vec)
}
negative_paren(test)
[1] 10 -10 5
精彩评论