Rのread.csv
関数でcolClasses
オプションを指定しようとしています。私のデータでは、最初の列「time」は基本的に文字ベクトルですが、残りの列は数値です。
data <- read.csv("test.csv", comment.char="" ,
colClasses=c(time="character", "numeric"),
strip.white=FALSE)
上記のコマンドでは、「時間」列のRを「文字」として読み取り、残りを数値として読み取ります。コマンドの完了後、「data」変数の結果は正しいものでしたが、Rは次の警告を返しました。これらの警告をどのように修正できるのでしょうか?
Warning messages:
1: In read.table(file = file, header = header, sep = sep, quote = quote, :
not all columns named in 'colClasses' exist
2: In tmp[i[i > 0L]] <- colClasses :
number of items to replace is not a multiple of replacement length
デレク
ColClassesベクトルは、インポートされた列の数と同じ長さでなければなりません。データセット列のrestが5であると仮定します。
colClasses=c("character",rep("numeric",5))
ColClasseは1列のみに指定できます。
したがって、あなたの例では次を使用する必要があります:
data <- read.csv('test.csv', colClasses=c("time"="character"))
「time」列に数字以外の文字を含む観測が少なくとも1つあり、他のすべての列に数字のみがあると仮定すると、「read.csv」のデフォルトは「time」で「factor」として読み取り、残りのすべては「数値」としての列。したがって、「stringsAsFactors = F」を設定すると、「colClasses」を手動で設定した場合と同じ結果になります。
data <- read.csv('test.csv', stringsAsFactors=F)
列番号ではなくヘッダーから名前を参照する場合は、次のようなものを使用できます。
fname <- "test.csv"
headset <- read.csv(fname, header = TRUE, nrows = 10)
classes <- sapply(headset, class)
classes[names(classes) %in% c("time")] <- "character"
dataset <- read.csv(fname, header = TRUE, colClasses = classes)
ヘッダーのない複数の日付時刻列と多くの列の場合、日付時刻フィールドは36列目と38列目にあり、文字フィールドとして読み込む必要があるとします。
data<-read.csv("test.csv", head=FALSE, colClasses=c("V36"="character","V38"="character"))
OPがutils::read.csv
関数について尋ねたのは知っていますが、ここに来るこれらの答えを提供して、tidyverseからreadr::read_csv
を使用してそれを行う方法を探します。
read_csv ("test.csv", col_names=FALSE, col_types = cols (.default = "c", time = "i"))
これにより、すべての列のデフォルトのタイプがcharacterに設定され、timeが整数として解析されます。
@Hendyと@Oddysseus Ithacaが貢献したものを組み合わせると、よりクリーンでより一般的な(つまり、適応性のある)コードのチャンクが得られます。
data <- read.csv("test.csv", head = F, colClasses = c(V36 = "character", V38 = "character"))