处理“会计”格式的负数

时间:2011-02-21 16:47:57

标签: r finance negative-number

我有数据集,其中负值以数字(10)==-10为基础显示,它是csv格式,如何处理它以便R将(10)解释为{{ 1}?谢谢。

UPDATE 我知道我可以将-10替换为(,删除-,然后使用)来解决这个问题,但这个问题有更优雅的方法吗?

2 个答案:

答案 0 :(得分:8)

如果为会计格式创建“as.acntngFmt”方法,则可以使用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"

答案 1 :(得分:0)

如果知道括号是单位中唯一的括号,则可以创建一个函数来处理它们:

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