web-dev-qa-db-ja.com

csv-datasetをRにインポートしましたが、値はファクターになります

私はRが初めてで、インポートしたデータセットへのアクセスに問題があります。私はRStudioを使用しており、csvファイルをインポートするときにデータセットのインポート機能を使用し、コンソールウィンドウからソースウィンドウに行を貼り付けました。コードは次のようになります。

setwd("c:/kalle/R")
stuckey <- read.csv("C:/kalle/R/stuckey.csv")
point <- stuckey$PTS
time <- stuckey$MP

しかし、データは私が慣れているように整数でも数値でもありませんが、変数をプロットしようとすると、通常のプロットではなくヒストグラムのみが得られます。データを確認するとき、それは順番にあるように見えますが、それはファクター形式であるため使用できません。

59
Joe

データインポート関数(ここではread.csv())とグローバルオプションの両方で、これを修正する必要があるstringsAsFactors=FALSEと言うことができます。

61

デフォルトでは、read.csvはデータの最初の数行をチェックして、各変数を数値として扱うかどうかを確認します。数値以外の値が見つかった場合、変数は文字データであると見なされ、文字変数は因子に変換されます。

データセット内のPTSおよびMP変数に非数値が含まれているように見えるため、予期しない結果が得られます。これらの変数を強制的に数値にすることができます

point <- as.numeric(as.character(point))
time <- as.numeric(as.character(time))

ただし、変換できない値は失われます。 (R FAQは、係数->数値変換の方法が少し異なりますが、それが何であるか思い出せません。)

27
Hong Ooi

options(stringsAsFactors=F)を使用して、すべてのread.csv/read.*コマンドにこれをグローバルに設定できます

次に、次のようにファイルを読み取ります:my.tab <- read.table( "filename.csv", as.is=T )

20
Sam

Csvデータファイルをインポートするとき、インポートコマンドは、各列(;)と数値の浮動小数点セパレータ(数値変数= 2,5の場合、これは "、")間のデータ分離の両方を反映する必要があります。

したがって、csvをインポートするコマンドは、より多くのコマンドを使用して、より包括的なものにする必要があります。

    stuckey <- read.csv2("C:/kalle/R/stuckey.csv", header=TRUE, sep=";", dec=",")

これにより、すべての変数が整数または数値としてインポートされます。

5
Daniel

私もRが初めてで、まったく同じ問題に直面しました。しかし、データを見て、csvファイルがすべての数値列でコンマ区切り文字(、)を使用しているという事実が原因であることに気付きました(例:1233444.56ではなく1,233,444.56)。

Csvファイルのカンマ区切りを削除してからRに再読み込みしました。データフレームはすべての列を数字として認識します。

Read.csv関数自体の中にこれを処理する方法があると確信しています。

2
Rishal

これは、strip.white = TRUEコマンドにread.csvを含める場合にのみ正しく機能しました。

(私は解決策を見つけました ここ 。)

1
Helen

私にとっての解決策は、skip = 0(ファイルの先頭でスキップする行数。0より大きい値に設定可能)を含めることでした。

mydata <-read.csv(file = "file.csv"、header = TRUE、sep = "、"、skip = 22)

0
Tymo