web-dev-qa-db-ja.com

CSVファイルの読み取り時に係数に変換される数値変数

Excelで作成された.csvファイルをRに読み取ろうとしています。すべてのベクトル(CSVファイルの列)は数値です。ただし、インポートするたびにファクターに変換されます。

以下は、CSVがどのように見えるかのサンプルです。

enter image description here

これは私のコードです:

options(StringsAsFactors=F)
data<-read.csv("in.csv",dec=",",sep=";")

ご覧のとおり、de decを「、」に、sepを「;」に設定しています。ただし、数値である必要があるベクトルはすべて因子です!

誰かが私にアドバイスをくれますか?ありがとう!

17
intael

CsvファイルのNA文字列N/Acharacterとして解釈され、列全体がcharacterに変換されます。 optionsまたはstringsAsFactors = TRUE(デフォルト)にread.csvがある場合、列はfactorにさらに変換されます。引数na.stringsを使用して、read.csvにどの文字列をNAとして解釈するかを指示できます。

小さな例:

df <- read.csv(text = "x;y
                 N/A;2,2
                 3,3;4,4", dec = ",", sep = ";")
str(df)

df <- read.csv(text = "x;y
                 N/A;2,2
                 3,3;4,4", dec = ",", sep = ";", na.strings = "N/A")
str(df)

コメントに続く更新

提供されたサンプルデータからは明らかではありませんが、数字に連結された「$」のインスタンスにも問題があります。 「$ 3,3」。このような値はcharacterとして解釈され、dec = ","は役に立ちません。変数を数値に変換する前に、「$」と「、」の両方を置き換える必要があります。

df <- read.csv(text = "x;y;z
               N/A;1,1;2,2$
               $3,3;5,5;4,4", dec = ",", sep = ";", na.strings = "N/A")
df
str(df)

df[] <- lapply(df, function(x){
  x2 <- gsub(pattern = "$", replacement = "", x = x, fixed = TRUE)
  x3 <- gsub(pattern = ",", replacement = ".", x = x2, fixed = TRUE)
  as.numeric(x3)
  }
                         )
df
str(df)
12
Henrik

元のコードを実際に動作させることができたかもしれません-小さなミス(「StringsAsFactors」ではなく「stringsAsFactors」)があります。 optionsコマンドは間違ったテキストで文句を言うことはありませんが、機能しません。正しく行われると、要素ではなくcharとして読み取られます。その後、列を任意の形式に変換できます。

5
aifille

私はちょうどこの同じ問題を抱えていて、この投稿と他の重複した投稿のすべての修正を試みました。どれもそれほどうまくいきませんでした。修正方法は、実際にはExcel側でした。 (Excelで)ソースファイルのすべての列を強調表示する場合、右クリック==>セルをフォーマットし、「数値」を選択します(ヘッダーの下に数字以外の文字がない限り)。

0
Jesse001