Excelで作成された.csvファイルをRに読み取ろうとしています。すべてのベクトル(CSVファイルの列)は数値です。ただし、インポートするたびにファクターに変換されます。
以下は、CSVがどのように見えるかのサンプルです。
これは私のコードです:
options(StringsAsFactors=F)
data<-read.csv("in.csv",dec=",",sep=";")
ご覧のとおり、de decを「、」に、sepを「;」に設定しています。ただし、数値である必要があるベクトルはすべて因子です!
誰かが私にアドバイスをくれますか?ありがとう!
CsvファイルのNA
文字列N/A
はcharacter
として解釈され、列全体が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)
元のコードを実際に動作させることができたかもしれません-小さなミス(「StringsAsFactors」ではなく「stringsAsFactors」)があります。 optionsコマンドは間違ったテキストで文句を言うことはありませんが、機能しません。正しく行われると、要素ではなくcharとして読み取られます。その後、列を任意の形式に変換できます。
私はちょうどこの同じ問題を抱えていて、この投稿と他の重複した投稿のすべての修正を試みました。どれもそれほどうまくいきませんでした。修正方法は、実際にはExcel側でした。 (Excelで)ソースファイルのすべての列を強調表示する場合、右クリック==>セルをフォーマットし、「数値」を選択します(ヘッダーの下に数字以外の文字がない限り)。