处理"会计"格式的负数

lok*_*art 5 finance r negative-number

我有数据集,负数值用数字括号表示,即(10)==-10它是csv格式,我该如何处理它以便R将其解释(10)-10?谢谢.

更新我知道我可以通过替换(as -,删除)as.numeric之后使用来解决这个问题,但这个问题有更优雅的方法吗?

42-*_*42- 9

如果为记帐格式创建"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"
Run Code Online (Sandbox Code Playgroud)

  • 使用正则表达式的`fixed = TRUE`模式可以加快速度:`as.numeric(sub(")","",sub("("," - ",from,fixed = TRUE),fixed = TRUE ))`. (2认同)
  • 基于 42- 的答案,处理会计格式中嵌入逗号的代码: `setClass("acntngFmt") clean.acc &lt;- function(from) { as.numeric(gsub("\\,", "", gsub("\\)", "", gsub("\\(", "-", from)))) } setAs("字符", "acntngFmt", clean.acc)` (2认同)