web-dev-qa-db-ja.com

read.csvでcolClassesを指定する

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

デレク

101
defoo

ColClassesベクトルは、インポートされた列の数と同じ長さでなければなりません。データセット列のrestが5であると仮定します。

colClasses=c("character",rep("numeric",5))
77
George Dontas

ColClasseは1列のみに指定できます。

したがって、あなたの例では次を使用する必要があります:

data <- read.csv('test.csv', colClasses=c("time"="character"))
151
Etienne

「time」列に数字以外の文字を含む観測が少なくとも1つあり、他のすべての列に数字のみがあると仮定すると、「read.csv」のデフォルトは「time」で「factor」として読み取り、残りのすべては「数値」としての列。したがって、「stringsAsFactors = F」を設定すると、「colClasses」を手動で設定した場合と同じ結果になります。

data <- read.csv('test.csv', stringsAsFactors=F)
13
wkmor1

列番号ではなくヘッダーから名前を参照する場合は、次のようなものを使用できます。

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)
10
scentoni

ヘッダーのない複数の日付時刻列と多くの列の場合、日付時刻フィールドは36列目と38列目にあり、文字フィールドとして読み込む必要があるとします。

data<-read.csv("test.csv", head=FALSE,   colClasses=c("V36"="character","V38"="character"))                        
3
Odysseus Ithaca

OPがutils::read.csv関数について尋ねたのは知っていますが、ここに来るこれらの答えを提供して、tidyverseからreadr::read_csvを使用してそれを行う方法を探します。

read_csv ("test.csv", col_names=FALSE, col_types = cols (.default = "c", time = "i"))

これにより、すべての列のデフォルトのタイプがcharacterに設定され、timeが整数として解析されます。

2
EuGENE

@Hendyと@Oddysseus Ithacaが貢献したものを組み合わせると、よりクリーンでより一般的な(つまり、適応性のある)コードのチャンクが得られます。

    data <- read.csv("test.csv", head = F, colClasses = c(V36 = "character", V38 = "character"))                        
0
seapen