2017-09-21 5 views
0

Ich kann mir wirklich vorstellen, dass die Antwort bei stackoverflow gefunden werden kann, aber dann verstehe ich es nicht. Also das ist meine Frage:R gelten für zwei Datenrahmen

Ich habe eine data.frame "tmp", die aus 17 Spalten und vielen Zeilen besteht. Was ich tun möchte, ist ca. Funktion zu verwenden, mit den Informationen aus tmp Zeile für Zeile der Funktion anwenden mit:

tmp[,17] <- apply(tmp[,4:16], 1, approx, y = y, x = tmp[,2])

wo y fix ist.

Mein Problem ist, dass ich jetzt eine n x n-Matrix bekomme, weil die Apply-Funktion jedes Paar tmp[,4:16] und tmp[,2] berechnet. Was ich brauche, ist nur die Diagonale, das heißt

(tmp[1,4:16], tmp[1,2]), (tmp[2,4:16], tmp[2,2]), (tmp[3,4:16], tmp[3,2]),...

Und ich möchte vermeiden Dinge wie diag(apply(...)) oder eine Schleife zu machen, weil ich will, Rechenzeit reduzieren.

Ich hoffe jemand kann mir helfen und vielen Dank im Voraus

+0

Ist das möglich? 'approx (tmp [1,4: 16], tmp [1,2])' wirft 'Fehler in xy.coords (x, y, setLab = FALSE):' x 'und' y 'Längen unterscheiden sich. –

+0

Sie benötigen die Knoten in der approximativen Funktion: 'approx (y, tmp [1,4: 16], tmp [1,2])' wobei y die gleiche Länge von tmp [1,4: 16] hat. In meiner Anwendungsfunktion verdrehte ich das 'y' und das' tmp [, 4: 16] 'und schrieb eine neue approximative Funktion, in der ich die Vektoren in der richtigen Reihenfolge einfügte, also' tmp [, 17] <- apply (tmp [, 4: 16], 1, approx2, y = y, x = tmp [, 2]) 'mit' approx2 <- Funktion (tmp, y, tmp2) {approx (y, tmp, tmp2) [[2] ]} ' – Chefkoch

Antwort

0

Ist das, was Sie wollen? Beachten Sie, dass sowohl tmp[, 4:16] als auch tmp[, 2] die gleiche Zeile i verwenden.

set.seed(4542) # make it reproducible 

tmp <- as.data.frame(matrix(rnorm(20*17), ncol = 17)) 
y <- rnorm(length(4:16)) 

s <- sapply(seq_along(tmp[, 1]), function(i) approx(y, tmp[i, 4:16], tmp[i, 2])) 

Statt seq_along(tmp[, 1]) ist es auch möglich seq_len(nrow(tmp)) zu verwenden.

+0

Das ist genau das, was ich wollte! Vielen Dank! – Chefkoch

+0

Nach dem Testen Ihres Codes (es funktioniert sehr gut!) Ich habe eine Frage. Warum ist die Systemzeit höher, wenn ich deinen Code verwende, dann benutze ich meinen Code von der Frage, aber ich bekomme n x n Ergebnisse und mit deiner Lösung nur n Ergebnisse? – Chefkoch

+0

@Chefkoch Nur die Systemzeit oder die Gesamtzeit? –

Verwandte Themen