2010-05-10 9 views
83

içinde colClasses belirtilmesiişlevinde colClasses seçeneğini belirtmeye çalışıyorum. Verilerimde ilk sütun "time" temelde bir karakter vektörü, sütunların geri kalanı ise nümeriktir.read.csv

Yukarıdaki komut
data <- read.csv("test.csv", comment.char="" , 
       colClasses=c(time="character", "numeric"), 
       strip.white=FALSE) 

, ben R "karakteri" ve sayısal olarak geri kalanı "zaman" sütununda okumak ister ki. Komut tamamlandıktan sonra "data" değişkeni doğru sonuca sahip olmasına rağmen, R aşağıdaki uyarıları geri verdi. Bu uyarıları nasıl düzeltebileceğimi merak ediyorum.

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 

derek

cevap

69

colClasses vektör içe sütun sayısına eşit uzunlukta olmalıdır. senin veri kümesi sütun dinlenme farz 5 şunlardır:

colClasses=c("character",rep("numeric",5)) 
+7

biri muhtemelen csv'nin ilk satırını okumak ve kaç tane sütun olduğunu belirlemek için aşağıdakileri kullanabilir. scan (csv, sep = ',', what = "character", nlines = 1) – defoo

+22

Bu aslında yanlış bir cevaptır ve bir süre beni attı. Doğru cevap aşağıda. Bir pislik olmaya çalışmıyor, sadece başka kimseye olmadığından emin olmak istedim. – Rob

+3

@Rob Benim durumumda, diğer değişkenlerin sınıflarını da belirtmeniz gerektiğinde ve okundu olarak "read.table" ile otomatik olarak tanınmadığınız halde bu hala doğru cevaptır. – tchakravarty

11

için 'zaman' sütunu sadece sayı, daha sonra 'Read.csv en sahip bir sayısal olmayan karakter ve diğer tüm sütunları ile en az bir gözlemini sahiptir varsayarsak varsayılan 'zaman' içinde bir 'faktör' ve tüm sütunların geri kalanı 'sayısal' olarak okunacaktır. Bu nedenle ayar 'stringsAsFactors = F' ayarı ile aynı sonucu verecektir 'colClasses' elle yani

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

Yalnızca bir sütunlar için colClasse belirtebilirsiniz.

Yani örnekte kullanmalısınız:

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

Çok önemli değil ama bunu sütun ismini belirtmeden çalışmayı buldum. – Hendy

10

sütun rakamlardan ziyade başlığından isimleridir istiyorsanız, böyle bir şey kullanabilirsiniz: çoklu İçin

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) 
1

datetime sütunları, hiçbir üstbilgi ve çok fazla sütun varsa, datetime alanlarının sütunlar 36 ve 38 olduğunu ve bunların karakter alanları olarak okunmasını istediğimi söyle:

data<-read.csv("test.csv", head=FALSE, colClasses=c("V36"="character","V38"="character"))       
İlgili konular