2017-07-06 2 views
0

Ich habe einen Datensatz von Zeit/Wert, z.Konvertieren XY-Datensatz in Array

> df <- data.frame(time=c(1,4,5,6), speed=c(100, 500, 600, 800)) 

Ich möchte es auf ein Array mit einem Element pro Zeit Zecke konvertieren:

> some_func(df, speed ~ time, step=1) 
[1] 100 100 100 500 600 800 

feststellen, dass eine Werte für Zeit == 2 und 3 hinzugefügt wurden.

Dann kann ich es in der Kreuzkorrelationsfunktion verwenden.

+0

nicht die gleichen Werte, sondern eine lineare Annäherung würde von 'ca. (df $ Zeit, df $ Geschwindigkeit, n = 6) zurückgeführt wird' dass füllt in einem linearen Interpolation für Zeiten 2 und 3 – lmo

Antwort

1

Dies wird die gewünschten Werte zurückgeben.

df$speed[rep(seq_len(nrow(df)), c(diff(df$time), 1))] 
[1] 100 100 100 500 600 800 

Hier verwenden wir rep zusammen mit einem Vektor Argumente an das zweite Argument für df$speed die Indizes des gewünschten Vektor zurückzukehren. Wir erreichen dies mit diff, die die Lücken der Zeitspanne berechnen und 1 am Ende anhängen, um den endgültigen Wert zurückzugeben.

+0

Dank. Es kann entwickelt werden, um zu tun, was ich brauche. A.o. Behandlung der Dezimal-Zeit und der Auflösung von Sekunden. –

2

Eine Möglichkeit besteht darin, die Schrittfunktion zu interpolieren, wie Sie dies in Ihrem obigen Beispiel wollten.

sf<-stepfun(df$time,c(df$speed[1],df$speed)) 
sf(1:6) 
+0

Leider funktioniert das nicht mit der ccf-Funktion und das ist was ich brauche. Gibt es eine Möglichkeit, es in einen Vektor zu konvertieren? –

+1

Das ausgewertete Objekt sf (1: 6) ist ein numerischer Vektor. ccf (sf (1: 6), sf (2: 7)) funktioniert daher. – alex2006

+0

Danke. Das macht den Trick. –