Vim csv.vimプラグインでCSVファイルのフィールドの周りにスペースを追加しました。これで、列クラスを数値(など)として宣言するのに問題がありますnum
。負の値は、次の列でも問題を引き起こす可能性があります。データには空のフィールドがあります。データdata.csv
Test, test2, test3
, 1 , 1
10.8, -1 , 1
1.1 , 2 , 2
パスワード
library('methods')
DF <- read.csv("/home/masi/Data/data.csv", header = T, sep = ",", colClasses=c('num','num'))
DF
出力
Error in methods::as(data[[i]], colClasses[i]) :
no method or default for coercing “character” to “num”
Calls: read.csv -> read.table -> <Anonymous>
Execution halted
- 実行時に数値に変換できませんでした
colClasses=c('num','num')
。 NA
2番目の列にはマイナス記号()があるため、3番目の列の-1
出力はと見なされます。
答え:3.3.3
答え1
AFAIKがnum
無効原子ベクトルクラス存在するR
:
可能な値は、NA(type.convertを使用する場合のデフォルト値)、「NULL」(列をスキップするとき)、原子ベクトルクラスの1つ(論理、整数、数値、複素数、文字、基本)、または「係数」、「日付」または「POSIXct」。それ以外の場合は、「文字」を指定された型クラスに変換するには(パッケージメソッドの)asメソッドが必要です。
これを次のコードに置き換えると、コードが機能しますnumeric
。
> DF <- read.csv("data.csv", header = T, sep = ",", colClasses=c('num','num'))Error in methods::as(data[[i]], colClasses[i]) :
no method or default for coercing “character” to “num”
しかし、
> DF <- read.csv("data.csv", header = T, sep = ",", colClasses=c('numeric','numeric'))
>
> DF
Test test2 test3
1 NA 1 1
2 10.8 -1 1
3 1.1 2 2
>
答え2
努力するリーダーtrim_ws=TRUE
パラメータを含むパッケージread_delim()
:
R> readr::read_delim("data.csv", delim=",", col_types="dii", trim_ws=TRUE)
# A tibble: 3 × 3
Test test2 test3
<dbl> <int> <int>
1 NA 1 1
2 10.8 -1 1
3 1.1 2 2