Хобрук: Ваш путь к мастерству в программировании

Как преобразовать неправильную таблицу с ложными днями в обычный временной ряд?

У меня много таблиц с климатическими наблюдениями в суточной периодичности. Как видите, во всех столбцах месяцев 31 день. Я хочу правильно организовать эти данные, исключить все ложные дни и преобразовать в обычный временной ряд.

представление данных: введите здесь описание изображения

вывод (голова (данные, 31)):

structure(list(NA. = 1:31, JAN = c(NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_
), FEV = c(NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_), MAR = c(0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 12.5, 0), ABR = c(0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 1.9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, NA), MAI = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 2.5, 0, 0, 0, 0, 0, 0, 1.8, 0, 0, 0), JUN = c(0, 
0, 0, 0, 0, 3.4, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 
0, 6.8, 2.4, 2.1, 0, 0, 0, 0, 0, NA), JUL = c(0, 0, 4.4, 0, 0, 
15.4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.2, 0, 1.3, 0, 0, 1.7, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0), AGO = c(0, 0, 0, 0, 1.9, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3.1, 4, 2.6, 0, 0, 
0, 0, 0), SET = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NA), OUT = c(0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0), NOV = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17.7, 0, 0, 0, 0, 0, 0, 
0, NA), DEZ = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)), row.names = c(NA, 
31L), class = "data.frame")

Мне нравится этот пример:

введите здесь описание изображения

исходные данные: https://www.dropbox.com/s/0xizr6fhbriieds/data.csv?dl=0

Пожалуйста, помогите мне. Для моего научного посвящения.

23.04.2020

  • это с 2000 года? 23.04.2020
  • Я попытался поставить данные, как вам нужно. Но я не знаю, как работает dput(). 23.04.2020
  • Не совсем. В этом году я поставил например. Мои данные установлены там столько разных лет. Но, если я могу работать с этим набором в примере, я действительно смогу работать и с остальными. 23.04.2020
  • Сделанный! Я думаю, что это правильно сейчас. 23.04.2020
  • Взгляните на stackoverflow.com/questions/2185252/ 23.04.2020

Ответы:


1

Из вашего вопроса не совсем понятно, как вы хотите фильтровать данные, но для преобразования в длинную форму и удаления NA один из подходов будет с dplyr, tidyr и lubridate.

Я использую data.table для загрузки ваших данных, потому что по какой-то причине они разделены точкой с запятой, хотя расширение файла .csv.

Возможно, вам сойдет с рук не переименовывать месяцы, так как ваш местный, вероятно, принимает испанские сокращения месяцев.

libary(data.table)
data <- fread("data.csv")
names(data) <- c("Day",month.abb)

library(dplyr)
library(tidyr)
library(lubridate)
Year <- 2000
data %>% 
  pivot_longer(-Day,names_to = "Month") %>%
  mutate(Date = dmy(paste(Day,Month,Year))) %>%
  filter(!is.na(value)) %>%
  select(Date,value)
#   Date       value
#   <date>     <dbl>
# 1 2000-07-03   4.4
# 2 2000-08-05   1.9
# 3 2000-06-06   3.4
# 4 2000-07-06  15.4
# 5 2000-04-12   1.9
# 6 2000-06-15   7  
# 7 2000-07-16   2.2
# 8 2000-07-18   1.3
# 9 2000-05-21   2.5
#10 2000-07-21   1.7
23.04.2020
  • Эй брат. Ты снова помогаешь мне? Как я могу изменить год? В этом коде год является константой. Могу ли я иметь временной ряд с началом года в 2000 году и изменением на следующий год? например: 2000, 2001, 2002, 2003... 24.04.2020
  • Как узнать за какой год данные? Исходные данные в вашем вопросе фактически не содержат года. Я просто выбрал 2000, потому что это то, что вы хотели получить. 24.04.2020
  • Новые материалы

    Учебные заметки JavaScript Object Oriented Labs
    Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

    Разбор строк запроса в vue.js
    Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

    Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
    «Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..

    Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
    каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

    Как настроить Selenium в проекте Angular
    Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..