2014-01-17 4 views
2

Я знаю, что многие сообщения уже отвечали на подобные вопросы, такие как мои, но я попытался выяснить это в течение 2 дней, и кажется, что я не вижу изображение здесь. ..r import csv skip первая и последняя строки

Я получил этот CSV-файл, глядя, как это:

Werteformat:    wertabh. (Q) 
Werte: 
01.01.76 00:00 0,363 
02.01.76 00:00 0,464 
... 
31.12.10 00:00 1,03 
01.01.11 00:00 Lücke 

Я хочу создать график с данными, но я не могу импортировать CSV правильно.

Я попытался это до сих пор:

data<-read.csv2(file, 
      header = FALSE, 
      sep = ";", 
      quote="\"", 
      dec=",", 
      col.names=c("Datum", "Abfluss"), 
      skip=2, 
      nrows=length(strs)-2, 
      colClasses=c("date","numeric"))` 

Но тогда я получаю

"Fehler in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, : 
    scan() erwartete 'a real', bekam 'L�cke'" 

так я удалить colClasses и он работает, я избавилась от всех нежелательных строк. Но: все в факторах. Поэтому я использую as.numeric

Abfluss1<-as.numeric(data$Abfluss) 

знаю, что можно вычислить с Abfluss 1, но значения совершенно иначе, чем в оригинальном формате CSV ...

Abfluss1 
    [1] 99 163 250 354 398 773 927 844 796 772 1010 1468 1091 955 962 933 881 844 803 772 773 803 1006 969 834 779 755 
    [28] 743 739 

Где я ошибся ?! Я действительно был бы признателен за полезные подсказки. Кстати, файлы, я работаю на можно скачать здесь: http://ehyd.gv.at/#

Просто нажмите на одну из этих сине-иш треугольников и скачать «Q-Tagesmittel»

+1

использование 'stringsAsFactors = false', если вы не хотите, факторов и преобразовать правильно числовые сделать' as.numeric (as.character (yourfacto r)) ' – eddi

+0

Установите' na.strings = "Lücke" 'при чтении файла. – Roland

+0

Я включил обе строки сейчас ('na.строки и 'strAsAsFactors'), как было предложено выше, теперь данные $ Abfluss являются символом. При преобразовании в число с 'as.numeric (as.character (ваш коэффициент))' Я получаю только NA для каждой строки ... – HairyFloh

ответ

4

Прежде всего, кажется, проблема с кодировкой файла. Загруженный файл имеет, очевидно, латинское-кодирование, которое не правильно распознает, почему он говорит L�cke и не Lücke:

encoding = "latin1" 

Во-вторых, Ваш пример, как представляется, не воспроизводимые: Из моего понимания вы хотите, чтобы пропустить 28 строк (возможно, я ошибаюсь). И переменная strs не объявлена ​​в вашем примере. Из того, что я понял, вы хотите, чтобы пропустить 28 строк и оставить последний так, в общем

nrows = length(readLines(file)) - 29 

Наконец, вы врезались в этот общий R вопрос: How to convert a factor to an integer\numeric without a loss of information?. Весь столбец интерпретируется как вектор character, потому что не все элементы могут быть интерпретированы как numeric. И при добавлении вектора character в data.frame он по умолчанию заносится в столбец factor. Хотя это не является необходимым, если вы указали правильный диапазон строк, вы можете избежать этого с

stringsAsFactors = FALSE 

Таким образом, в общей сложности:

f <- readLines("Q-Tagesmittel-204586.csv") 
df <- read.csv2(
    text = f, 
    header = FALSE, 
    sep = ";", 
    quote="\"", 
    dec=",", 
    skip=28, 
    col.names=c("Datum", "Abfluss"), 
    nrows = length(f) -29, 
    encoding = "latin1", 
    stringsAsFactors = FALSE 
) 

О, и только в случае, если вы хотите преобразовать в следующем шаге Datum столбца объекта даты, один метод для достижения этой цели будет

df$Datum <- strptime(df$Datum, "%d.%m.%Y %H:%M:%S") 

str(df) 
'data.frame': 12784 obs. of 2 variables: 
$ Datum : POSIXlt, format: "1976-01-01" "1976-01-02" "1976-01-03" "1976-01-04" ... 
$ Abfluss: num 0.691 0.799 0.814 0.813 0.795 0.823 0.828 0.831 0.815 0.829 ...