2017-11-26 4 views
0

Ich habe Wetterdaten mit Jahr, Monat und Tag markiert. Hier sind einige der Daten:Anzahl der Variablen auf 2 Ebenen gruppiert

Date   MinT  Year Month 
1976-01-01 1.1  1976 1 
1976-01-02 0.3  1976 1 
1976-01-03 1.3  1976 1 

Der Datendurchlauf ist 1976: 2016 für alle Monate. Rufen Sie diese Testdaten auf.

I-Gruppe und Untergruppe kann wie folgt (es ist sehr klobig, aber das ist, weil ich jeden Schritt zu testen versucht)

temp1 <- TestData %>% 
    group_by(Year) 
temp2 <- temp1 %>% 
    subset(between(Month, 1, 3)) 
temp3 <- temp2 
v1 <- replace(temp3$minT, temp3$minT >-2.0,0) ### replaces data above the threshold 
temp3["v1"] <- v1 
index1 <- with(temp3, tapply(X = v1, INDEX = Year, FUN = sum)) ##  sums the month 1-3-2 degree values 
index2 <- with(temp3, tapply(X = v1, INDEX = Year, FUN = length)) ## counts the number of items in each year for the selected period. 

index2 gibt mir eine Zählung der Tage in jedem Monat. Ich kann index1 und 2 verwenden, um Index von "Wetter für den Monat" zu schaffen.

Was ich möchte, ist in der Lage, eine Zählung aller Tage unter -2 (oder was auch immer) zu erhalten und so einen Index von vergleichbarem Schweregrad für jeden Monat zu bekommen.

Die v1 Zuordnung ist notwendig, weil, wenn ich rle verwenden Instanzen zu zählen, einige Monate Null-Instanzen haben und sie fallen aus dem letzten tally die kompilierte Tabelle von Indizes gegen minT, year und month Bedeutung hat Indexvektoren unterschiedlicher Länge die R mag nicht. Ich habe versucht, rle als Spaß in der index2 Aufgabe, aber das würde mich nicht den Tag zählt zu erreichen. Dasselbe gilt für die Verwendung eines Bereichs mit der Länge in dieser Zuweisung (index3).

Kurz von der Generierung einer Mini-Tabelle für jedes Jahr, ich bin fest. Hat jemand irgendwelche Vorschläge?

Antwort

0

Ich denke, summarise ist die Funktion, die Sie suchen. So etwas wie diese (verschiedene Daten, gleiche Prinzip):

library(latticeExtra) 

threshold <- 40 

SeatacWeather %>% 
    group_by(year, month) %>% 
    filter(min.temp < threshold) %>% 
    summarise(days_below_threshold = n()) 
+0

versucht, dies auf meine Daten bekomme ich einen Fehler „keine anwendbare Methode für‚group_by_‘angewendet auf ein Objekt der Klasse“ C (‚double‘, ‚numerisch‘) " – BobA

+0

Sie könnten' TestData $ Year <- Faktor (TestData $ Year) 'versuchen. Sonst brauchen wir wahrscheinlich mehr Informationen. – Birger

+0

Danke! Ich habe mitten in der letzten Nacht darüber nachgedacht, bevor ich das gelesen habe deklariere temp1 einen Datenframe.Das hat group_by erlaubt zu arbeiten! Das Schwellwertfiltersegment hat dann die Tage erzeugt. Nochmals - Danke! – BobA

Verwandte Themen