Vektor auffüllen

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Antworten
jessi
Beiträge: 100
Registriert: Mo Jul 10, 2017 9:23 am

Vektor auffüllen

Beitrag von jessi »

Hallo,

ich möchte gerne zwei Zeitreihen (jeweils aus dem Jahre 2011 und 2012) miteinander vergleichen und diese auch graphisch darstellen. Das Problem ist jetzt, dass die Vektoren, die ich vergleichen möchte, nicht immer gleich lang sind. Meine Daten sehen wie folgt aus:

Code: Alles auswählen

    42   13 2011 0    38
    42   13 2011 8    23
    42   13 2011 12   101
    42   13 2011  14  140
    42   13 2011  24    51
    
    42   13 2012 -5    38
    42   13 2012 18    23
    42   13 2012  20   101
    42   13 2012  22   140
    42   13 2012  24    51    
    42   13 2012  26    38
    42   13 2012  28    23
    42   13 2012  32   101
  
Die Werte 42 und 13 sind die örtliche Zuweisung, 2011 bzw. 2012 die Jahre, danach die Temperaturen und als letzter Wert die Anzahl, wie oft die Temperatur im jeweiligem Jahr an diesem Ort vorkam. Jetzt möchte ich die T-Werte bei der die örtliche Zuweisung übereinstimmt, auf die gleiche Länge bringen, bzw. die "fehlenden" Werte mit Null ergänzen, um sie besser vergleichen bzw. plotten zu können.
So sollte es am Ende aussehen:

Code: Alles auswählen


    42  13  2011 -4    0
    42   13 2014  -2   0
    42   13 2011  0    38
    42   13 2011  2      0
    42    13 2011  4     0
    42   13  2011  6     0
    42   13 2011   8    23
    42    13 2011  10   0
    42   13 2011 12   101
    42   13 2011  14  140
    ---
    42   13 2011  24    51
    ...
    42   13 2011 32   0
    
    
    42   13 2012 -4    38
    42   13 2012 -2     0
    42   13 2012 0    0
    42   13 2012 2     0
    42   13 2012 4     0
    ... 
    42   13 2012 18    23
    42   13 2012  20   101
    42   13 2012  22   140
    42   13 2012  24    51    
    42   13 2012  26    38
    42   13 2012  28    23
    ....
    42   13 2012  32   101

Leider fehlen die Werte nicht immer an den gleichen Stellen, bei den Punkten 41,13 müssten die nuller an andere Stellen.
Kann man sowas mit R automatisiert machen? Bis jetzt hab ich den Output immer händisch mit Null befüllt und auf die gleiche Länge gebracht.

Vielen Dank für eure Hilfe!
Jess
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Vektor auffüllen

Beitrag von EDi »

Hört sich nach einem outer join (oder einem left outer join, fallsnur in einer Tabelle was fehlt).

Das geht mit merge():

Code: Alles auswählen

merge(x = df1, y = df2, by = "Datum", all = TRUE) 
oder als left join

Code: Alles auswählen

merge(x = df1, y = df2, by = "Datum", all.x = TRUE)
Datum müsste eine spalte sein, mit der du die passenden Paare identifizierst. Praktischerweise, erhällt du die alten und neue Zeitreihe in einem data.frame...
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
jessi
Beiträge: 100
Registriert: Mo Jul 10, 2017 9:23 am

Re: Vektor auffüllen

Beitrag von jessi »

Hallo,

vielen Dank für deine Hilfe. Das ist genau das, dass ich gesucht habe. Meine bins gehen von etwa -20 bis +52, je nachdem welchen "Ort" ich einlese. Das einzige was bei mir nicht klappt, ist das Auffüllen im negativen Bereich.

Code: Alles auswählen

df_y11 <- subset(bins, year = "2011")
df_y12 <- subset(bins, year=="2012")
df<-merge(x = df_y11, y = df_y12, by = "year", all = TRUE)
print(df)
year_11 <- data.frame(df$bin, df$count.x))
year_12 <- data.frame(df$bin, df$count.y))
print(year_11)
   df.bin df.count.x
1     -20        195
2      10         15
3      12        154
4      14        293
5      16        159
6      18         30
7      20          5
8      22         NA
9      24          1
10     26         NA
11     28         NA
12     30          1
13     32          3
14     34          2
15     36          2
16     38          2
17     40         NA
18     42         NA
19     44         NA
20     46         NA
21     48          1
22     50         NA
23     52         NA

Das waren meine Ausgangsdaten:
bin	count
-20	38
18	23
20	101
22	140
24	51
26	7
28	6
30	9
32	25
34	45
36	76
38	105
40	94
42	58
44	34
46	29
48	11
50	8
52	3

-20	195
10	15
12	154
14	293
16	159
18	30
20	5
24	1
30	1
32	3
34	2
36	2
38	2
48	1
Danke für eure Hilfe.
Schönen Sonntage, Grüße
Jessi
Antworten