2017-03-28 17 views
0

Ich habe einige lineare Regression und ich möchte den Zeitpunkt der Überschreitung eines bestimmten Werts prognostizieren.Lösen Sie eine lineare Gleichung für jede Zeile in Datentabelle

Das bedeutet, ich habe drei Säulen:

a= slope 
b = intercept 
c = target value 

Auf jeder Zeile I solve(a,(c-b))

berechnen möchten Wie kann ich dies tun in einer effizienten Art und Weise, ohne mit einer Schleife (es ist ein umfangreiches Datensatz)

Antwort

0

Hier ist eine einfache Möglichkeit, die Vectorize Funktion:

solve_vec <- Vectorize(solve) 
solve_vec(d$a, d$c - d$b) 

> solve_vec(d$a, d$c - d$b) 
[1] 12.0 6.0 4.0 3.0 2.4 
+0

Dies ist genau das, was ich brauche, da ich später möglicherweise schwierigere Funktionen verwenden kann. Vielen Dank! –

1

Sie wollen also im Grunde die Gleichung

c = a*x + b 

für für jede Zeile x zu lösen? Das hat die ziemlich einfache Lösung von

x = (c-b)/a 

, die in R. Keine Schleife notwendig

dd <- data.frame(
    a = 1:5, 
    b = -2:2, 
    c = 10:14 
) 
transform(dd, solution=(c-b)/a) 

# a b c solution 
# 1 1 -2 10  12.0 
# 2 2 -1 11  6.0 
# 3 3 0 12  4.0 
# 4 4 1 13  3.0 
# 5 5 2 14  2.4 
1

zusätzlich zu den oben genannten Antworten einen vektorisiert Betrieb ist, können Sie auch die mutate Funktion aus den tidyverse verwenden. so wie:

library(magrittr) 
library(tidyverse) 

dataframe %<>% mutate(prediction=solve(a,(c-b)) 

in diesem Beispiel gehen wir davon aus der 'a' Spalten, 'b' und 'c' sind in einer Tabelle mit dem Namen 'Datenrahmen'. Wir verwenden dann die %<>%-Funktion aus der magrittr-Bibliothek, um zu sagen, "wenden Sie die Funktion an, die dem Dataframe folgt".

Verwandte Themen