7

データセットがあります。この負の値は数値を角かっこで囲んで表示されます。つまり(10)==-10、csv形式ですが、Rがを解釈するように処理するにはどうすればよい(10)です-10か。ありがとうございました。

(更新asを置き換え-、削除)し、後で使用することで解決できることはわかってas.numericいますが、この問題に対してよりエレガントな方法はありますか?

4

2 に答える 2

10

アカウンティング形式の「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"
于 2011-02-21T18:18:17.110 に答える
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
于 2020-09-25T06:16:22.050 に答える