2017-10-11 1 views
0

Ich habe zwei TabellenR-Gruppe Werte in Spalte basierend auf Intervallen und der Mittelwert der Ergebnisse für jedes Intervall

Tabelle 1:

Dates_only <- data.frame(ID=c('1118','1118','1118','1118','1118', 
           '1118','1118','1118','1119','1119', 
           '1119','1119','1119','1119','1119', 
           '1119','13PP','13PP','13PP','13PP', 
           '13PP','13PP','13PP','13PP'), 
          Quart_y=c('2017Q3','2017Q4','2018Q1','2018Q2', 
             '2018Q3','2018Q4','2019Q1','2019Q2', 
             '2017Q3','2017Q4','2018Q1','2018Q2', 
             '2018Q3','2018Q4','2019Q1','2019Q2', 
             '2017Q3','2017Q4','2018Q1','2018Q2', 
             '2018Q3','2018Q4','2019Q1','2019Q2'), 
          Quart=c(0.25,0.50,0.75,1.00,1.25,1.50,1.75,2.00, 
            0.25,0.50,0.75,1.00,1.25,1.50,1.75,2.00, 
            0.25,0.50,0.75,1.00,1.25,1.50,1.75,2.00)) 

und Tabelle 2:

Values <- data.frame(ID=c('1118','1119','13PP','1118','1119','13PP', 
          '1118','1119','13PP','1118','1119','13PP', 
          '1118','1119','13PP','1118','1119','13PP', 
          '1118','1119','13PP','1118','1119','13PP', 
          '1118','1119','13PP','1118','1119','13PP'), 
        Day=c(0,0,0,0.14,0.13,0.13,0.2,0.23,0.24,0.27,0.28, 
          0.32,0.32,0.32,0.44,0.47,0.49,0.49,0.59,0.64, 
          0.61,0.72,0.71,0.73,0.95,0.86,0.78,1.1,0.93,1.15), 
        Value=c(7.6,6.2,6.8,7.1,6.2,5.9,6.8,5.8,4.6,6.5,5.4, 
          4.2,6.3,4.8,4,6,4.3,3.8,5.9,4,3.6,5.6,3.8, 
          3.4,5.4,3.2,3,5,2.9,2.9)) 

Was ich bin versuchen zu tun ist, einen Weg zu finden, um die Werte in Values$Day nach Dates_only$Quart zu ändern. Spezifisch, Dates_only$Quart stellen quantifizierte Viertel (2017Q3 - 0.25, 2017Q4-0.50,...,2018Q4-1.50) etc. dar. Während Values$Day quantifizierte Tage darstellt. Ich möchte die Values$Day von Quartal klassifiziert ändern statt, zum Beispiel: für 0<=Values$Day<=0.25 die Values$Day==0.25, für 0.25<Values$Day<=0.50 die Values$Day==0.50 usw.

Was ich habe versucht zu tun, um dieses Verfahren unten verwenden, aber es kommt mit einem Fehler auf Nachricht:

unique_quarters <- unique(Dates_only$Quart) 
unique_quarters <- append(unique_quarters, 0, after=0) 
df3 <- transform(Dates_only, 
       Transf_Day=Values$Quart[findInterval(Values$Day, unique_quarters)]) 

das Problem, das ich das Problem Vermutung ist, dass findInterval(Values$Day, unique_quarters) kehrt

1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 4 4 4 5 4 5 

Während Values$Quart Werte hat

0.25 0.50 0.75 1.00 1.25 1.50 1.75 2.00 
+0

versuchen 'schneiden (Werte $ Tag, seq (0,3,0.25), include.lowest = T)' – Jimbou

+0

Danke, aber das hilft nicht wirklich. Wie ich Zahlen und nicht Intervalle extrahieren möchte. Danke für die Mühe! – Jespar

Antwort

0

versuchen Sie dies:

library(tidyverse) 
as.tbl(Values) %>% 
    mutate(Int=cut(Day, seq(0,3,0.25), include.lowest = T)) %>% 
    mutate(Int2=factor(Int, labels = seq(0.25,1.25,0.25))) 
# A tibble: 30 x 5 
     ID Day Value  Int Int2 
<fctr> <dbl> <dbl>  <fctr> <fctr> 
1 1118 0.00 7.6 [0,0.25] 0.25 
2 1119 0.00 6.2 [0,0.25] 0.25 
3 13PP 0.00 6.8 [0,0.25] 0.25 
4 1118 0.14 7.1 [0,0.25] 0.25 
5 1119 0.13 6.2 [0,0.25] 0.25 
6 13PP 0.13 5.9 [0,0.25] 0.25 
7 1118 0.20 6.8 [0,0.25] 0.25 
8 1119 0.23 5.8 [0,0.25] 0.25 
9 13PP 0.24 4.6 [0,0.25] 0.25 
10 1118 0.27 6.5 (0.25,0.5] 0.5 
# ... with 20 more rows 
Verwandte Themen