2012-10-07 19 views
5

Chciałbym dodać metadane do mojego arkusza kalkulacyjnego jako komentarze, a R zignorować je potem.read.table i komentarze w R

moje dane są postaci

v1,v2,v3, 
1,5,7, 
4,2,1,#possible error, 

(co. Pierwszy komentarz faktycznie pojawi się wyjątek, który jest znacznie dłuższy dobrze poza top 5 wierszy, używane przez scan określić liczbę kolumn)

Próbowałem:

read.table("data.name",header=TRUE,sep=",",stringsAsFactors=FALSE,comment.char="#") 

Ale read.table (i, jeśli o to chodzi, count.fields) uważa, że mam jeszcze jedno pole, niż faktycznie. Moja ramka danych kończy się pustą kolumną o nazwie "X". Myślę, że dzieje się tak dlatego, że mój program do obsługi arkuszy kalkulacyjnych dodaje przecinki na końcu każdej linii (jak w powyższym przykładzie).

Korzystanie flush=TRUE nie ma wpływu, choć (zgodnie z pliku pomocy) to „[...] pozwala na wprowadzanie komentarzy po ostatnim polu [...]”

Korzystanie colClasses=c(rep(NA,3),NULL) nie ma wpływu ani.

Mogę po prostu usunąć kolumnę później, ale ponieważ wydaje się, że jest to powszechna praktyka, chciałbym nauczyć się, jak to zrobić właściwie.

Dzięki,

Andrew

Odpowiedz

4

Twój problem odnośnie charakteru komentarz i liczby kolumn danych są związane z read.table(), ale nie do arkusza kalkulacyjnego (Excel używam). Domyślnym zachowaniem dla read.table jest traktowanie znaku # jako początku komentarza i ignorowanie tego, co następuje. Powodem, dla którego otrzymujesz błąd, jest koniec przecinkiem na końcu linii danych. To mówi read.table, że więcej danych powinno nastąpić. Czytając oryginalną przykład:

> read.table(text="v1, v2, v3, 
+ 1,5,7, 
+ 4,2,1,#possible error,", sep=",", header=TRUE) 
    v1 v2 v3 X 
1 1 5 7 NA 
2 4 2 1 NA 

Komentarz jest domyślnie ignorowany i czwarta kolumna jest tworzona i oznaczone X. Można łatwo usunąć tę kolumnę po fakcie lub użyć metody @flodel wspomina czy można usunąć końcowe przecięcie przed odczytaniem pliku do R.W programie Excel końcowy przecinek jest dodawany podczas zapisywania pliku jako csv (zmienne oddzielane przecinkami), ponieważ komentarz pojawia się w czwartej kolumnie, a program Excel nie rozpoznaje go jako komentarza. Jeśli plik zostanie zapisany jako oddzielony spacją, problem zniknie (usuń argument separatora =, ponieważ spacja jest domyślnym separatorem):

> read.table(text="v1 v2 v3 
+ 1 5 7 
+ 4 2 1#possible error", header=TRUE) 
    v1 v2 v3 
1 1 5 7 
2 4 2 1 
5

Od doc (?read.table):

colClasses charakter. Wektor klas, które należy założyć dla kolumn. W razie potrzeby poddane recyklingowi lub jeśli nazwano wektor znaków, nieokreślone wartości przyjmowane są jako NA.

Możliwe wartości NA (domyślny, gdy stosuje type.convert), „pusta” (gdy kolumna jest pomijane), jednego z atomów klas wektora (logicznych, liczba całkowita liczbą, złożoną postać surowego) lub "współczynnik", "Data" lub "POSIXct". W przeciwnym razie musi istnieć metoda as (z metod pakietów) do konwersji z "znaku" do określonej klasy formalnej.

Zauważ, że mówi do korzystania "NULL", nie NULL. Rzeczywiście, to działa zgodnie z oczekiwaniami:

con <- textConnection(" 
v1,v2,v3, 
1,5,7, 
4,2,1,#possible error, 
") 

read.table(con, header = TRUE, sep = ",", 
      stringsAsFactors = FALSE, comment.char = "#", 
      colClasses = c(rep(NA, 3), "NULL")) 
# v1 v2 v3 
# 1 1 5 7 
# 2 4 2 1 
Powiązane problemy