2016-12-27 10 views
0

Diese Aufgabe ist schwierig für mich. Ich muss den Temperaturwert für jede Stunde (minimale aufgezeichnete Zeit) von 30/31 Tagen eines Monats finden. Aber der Sensor misst den Temperaturwert in unregelmäßigen Abständen (Eingabedatei ist als Bild angehängt). Ich möchte dafür R-Code schreiben. Beispiel Ausgabe:Sortieren mit Datum und Mindestzeit in R

1/6/2016 0.00 90.45 
1/6/2016 1.01 92.54 
1/6/2016 2.12 94.95 

1/6/2016 21.53 95.85 

Eine ähnliche Probe Datenrahmen:

Probe < - data.frame ( date = c (rep ("2016.06.01", 13), NA, NA, Vertreter ("2016-06-01", 3), NA, NA, Vertreter ("2016-06-01", 3), NA, Vertreter ("2016-06-02", 2)), Zeit = c ("0:00", "0:10", "0:20", "0:30", "1:01", "1:11", "1:21", 1:31, 1:41, 1:51, 2:12, 2:42, 2:52, NA, NA, 12:03, 12:13 "," 12:23 ", NA, NA , "21:53", "21:54", "23:14", NA, NA, NA), temp = c (90.45, 91.29, 90.88, 91.22, 92.54, 92.57, 93.18, 93.9, 94.51, 94.37 , 95.96, 95.32, 95.2, NA, NA, 95.37, 95.52, 95.35, NA, NA, 95.85, 95.6, 96.14, NA, NA, NA) )

Wenn jemand bitte an helfen, wie zu tun R

+2

Sie können 'cut.POSIXct' verwenden, um die Zeit in Stundenintervalle zu schneiden, verwenden Sie diese als Gruppierungsvariable, um den Minimalwert zu finden – akrun

+0

Willkommen bei StackOverflow! Bitte lesen Sie die Informationen über [wie man eine gute Frage stellt] (http://stackoverflow.com/help/how-to-ask) und wie man ein [reproduzierbares Beispiel gibt] (http://stackoverflow.com/questions/ 5963269). Dies wird es anderen sehr erleichtern, Ihnen zu helfen. – Axeman

+0

danke @akrun. Könnten Sie es bitte ausarbeiten? –

Antwort

1

aufbauend auf akrun Vorschlag Programmierung, hier ist eine mögliche Implementierung mit cut.POSIXct und dplyr:

library(dplyr) 
output <- 
    sample %>% # Using reproducible dataset above 
    # Filter to only observed records 
    filter(!is.na(date) & !is.na(time)) %>% 
    mutate(
    # Create a date_time using the date and time variables 
    date_time = as.POSIXct(paste(date, time), 
       format="%Y-%m-%d %H:%M"), 
    # Create hour intervals to be used as grouping variable 
     hour = cut.POSIXt(date_time, breaks = "hour")) %>% 
    # Group by hour 
    group_by(hour) %>% 
    # Select only records where the date and time are the minimum 
    # date and time in the group 
    filter(date_time == min(date_time)) 

ich den Code kommentiert - es gibt auf jeden Fall Möglichkeiten, m ake den code prägnanter und/oder handle edge-cases wie die leeren records besser, aber das sollte die minimale datumszeit pro stunde richtig wählen.

+0

Dank Adam geschrieben. Aber ich bin Neuling für R-Programmierung. Können Sie bitte den Code vollständig ausarbeiten, damit ich das komplette Ergebnis bekommen kann. Bibliothek (dplyr) setwd ("C:/Benutzer/Desktop/june") Daten <-read.csv ("test.csv", StringsAsFactors = FALSE) muss ich Ihren Code nach Eingabedatei Pfad schreiben. So speichern Sie die Ausgabe mit dem Sensorwert ... Bitte antworten Sie mir. –

+0

Kein Problem. Angenommen, Sie laden die Nicht-Beispieldaten (als "Daten"), müssen Sie den Code ausführen, um die Datei einzulesen und dann den Code auszuführen, den ich geschrieben habe, indem Sie die dritte Zeile ('Beispiel%>%' wird 'data%>%') –

+0

Bibliothek (dplyr) Daten <- read.csv ("test.csv", stringsAsFactors = FALSE) Ausgang <- Daten%>!% Filter (is.na (Datum) &! is.na (time))%>% mutieren ( date_time = as.POSIXct (einfügen (Datum, Uhrzeit), format = "% Y-% m-% d% H:% M"), Stunde = cut.POSIXt (date_time, Pausen = "Stunde"))%>% group_by (h)%>% Filter (date_time == min (date_time)) –