Sto cercando aiuto dopo aver sprecato quasi un giorno. Ho un grande data frame (bdf) e un piccolo data frame (sdf). Voglio aggiungere la variabile z a bdf in base al valore di sdf $ y (che cambia in funzione di una variabile temporale).Creazione di variabili nel frame di dati R in base a un altro frame di dati
Ecco un esempio riproducibile:
bdf <- data.frame(tb = seq(as.POSIXct("2013-05-19 17:11:22 GMT", tz="GMT"), by=5624*24, length.out=10))
bdf
tb
1 2013-05-19 17:11:22
2 2013-05-21 06:40:58
3 2013-05-22 20:10:34
4 2013-05-24 09:40:10
5 2013-05-25 23:09:46
6 2013-05-27 12:39:22
7 2013-05-29 02:08:58
8 2013-05-30 15:38:34
9 2013-06-01 05:08:10
10 2013-06-02 18:37:46
sdf <- data.frame(ts = as.POSIXct(c("2013-05-22", "2013-05-25", "2013-05-30"), tz="GMT"), y = c(0.2, -0.1, 0.3))
> sdf
ts y
1 2013-05-22 0.2
2 2013-05-25 -0.1
3 2013-05-30 0.3
voglio creare variabile z in BDF con i seguenti valori di SDF $ y:
0,2 per le righe dove BDF $ tb varia da il primo valore in bdf $ tb a metà strada tra il 1 ° e il 2 ° valore di sdf $ ts. In questo semplice esempio, è il caso delle righe da 1 a 3 di dbf che hanno volte bdf $ tb sotto "2013-05-23 12:00:00 GMT".
-0.1 per le righe in cui BDF $ tb va da metà strada tra il 1 ° e 2 ° valore della SDF $ ts a metà strada tra il 2 ° e 3 ° valore di $ SDF ts. In questo semplice esempio, è il caso delle righe 4 e 5 di dbf che hanno volte bdf $ tb tra "2013-05-23 12:00:00 GMT" e "2013-05-27 12:00:00 GMT" .
0.3 per tutte le righe in cui bdf $ tb va da metà strada tra il 2 ° e il 3 ° valore di sdf $ ts fino all'ultimo valore di bdf $ tb. In questo semplice esempio, è il caso delle righe da 1 a 6 a 10 di dbf che hanno tempi maggiori di "2013-05-23 12:00:00 GMT".
Quindi, alla fine, il grande dataframe BDF dovrebbe assomigliare a questa:
tb z
1 2013-05-19 17:11:22 0.2
2 2013-05-21 06:40:58 0.2
3 2013-05-22 20:10:34 0.2
4 2013-05-24 09:40:10 -0.1
5 2013-05-25 23:09:46 -0.1
6 2013-05-27 12:39:22 0.3
7 2013-05-29 02:08:58 0.3
8 2013-05-30 15:38:34 0.3
9 2013-06-01 05:08:10 0.3
10 2013-06-02 18:37:46 0.3
non ho potuto avere successo utilizzando dplyr :: mutare, ma ho nessun posto usando loops ... Qualsiasi aiuto sarebbe molto apprezzato. Spero di aver descritto chiaramente il problema come aderito all'etichetta (è la mia prima domanda).
suona come _join al valore più vicino_ Nel pacchetto 'data.table' forse' roll = "Più vicino", ma non ne ho esperienza e sono curioso di sapere se è possibile in 'dplyr' – ckluss