Apply auf alle Gruppen eines Dataframes anwenden

Allgemeine Statistik mit R, die Test-Methode ist noch nicht bekannt, ich habe noch keinen Plan!

Moderatoren: EDi, jogo

AlexWue
Beiträge: 9
Registriert: Mo Okt 29, 2018 3:46 pm

Re: Apply auf alle Gruppen eines Dataframes anwenden

Beitrag von AlexWue »

jogo hat geschrieben: Mo Jan 28, 2019 3:24 pm Eine Optimierung im Sinne von geringst mögliche Anzahl von Kisten pro Gruppe ist ein recht ordentliches Problem der Zahlentheorie.

Hier ist noch eine Variante meiner Funktion:

Code: Alles auswählen

packeKisten2 <- function(Vol) {
  if (any(Vol>volumen_kiste)) { message("ein Teil ist zu groß"); stop() }
  n <- length(Vol)
  Kiste <- integer(n)
  ksum <- 0; k <- 1
  for (i in 1:n) {
    Kiste[i] <- k; ksum <- ksum+Vol[i]
    if (i==n) break
    if ((ksum + Vol[i+1]) > volumen_kiste) { k <- k+1; ksum <- 0} ## neue Kiste
  }
  Kiste
}
Übrigens: ifelse() gehört zu den langsamen Funktionen (besonders, wenn man gar nicht mit Vektoren arbeitet).

Gruß, Jörg

etwas schneller als deine andere Funktion, aber noch deutlich langsamer als die for-Schleife.

zwecks ifelse: ich arbeite mit Vektoren, das habe ich nur der Einfachheit halber weggelassen. Meine ifelse Funktion überprüft die Werte aus einem separaten Vektor und schreibt auch die Ergebnisse in separate Vektoren.
AlexWue
Beiträge: 9
Registriert: Mo Okt 29, 2018 3:46 pm

Re: Apply auf alle Gruppen eines Dataframes anwenden

Beitrag von AlexWue »

jogo hat geschrieben: Mo Jan 28, 2019 3:57 pm Hallo Alex,

kannst Du bitte mal schreiben, wieviele Zeilen Dein Dataframe hat. Wieviele Zeilen sind durchschnittlich in einer Gruppe?
Bei meiner ersten Variante ist cumsum() der Bremser, wenn der Vektor sehr lang ist und die Anzahl der Teile pro Kiste klein.

Gruß, Jörg
AlexWue hat geschrieben: Mo Jan 28, 2019 3:52 pm das funktioniert, ist aber leider langsamer als mein aktueller Code. Dennoch danke!

Mit den "apply" Packages habt ihr nicht zufällig Erfahrung?

Hallo Jörg,

es sind ca. 4 Millionen Zeilen, meine for-Schleife mit Vektorisierung braucht etwa 16 Sekunden (ohne Vektorisierung mehrere Tage).
Gruppen sind es ca. 200.000, also durchschnittlich 20 Zeilen pro Gruppe.

Gruß Alex
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Apply auf alle Gruppen eines Dataframes anwenden

Beitrag von EDi »

Sieht für mich nach einem Kandidaten für Rcpp aus (viele aufrufe, relativ wenig komplexität).
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
AlexWue
Beiträge: 9
Registriert: Mo Okt 29, 2018 3:46 pm

Re: Apply auf alle Gruppen eines Dataframes anwenden

Beitrag von AlexWue »

EDi hat geschrieben: Mo Jan 28, 2019 5:48 pm Sieht für mich nach einem Kandidaten für Rcpp aus (viele aufrufe, relativ wenig komplexität).
Funktioniert und bringt die gewünschte Schnelligkeit, vielen Dank dafür!
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Apply auf alle Gruppen eines Dataframes anwenden

Beitrag von EDi »

AlexWue hat geschrieben: Mo Feb 11, 2019 10:18 am
EDi hat geschrieben: Mo Jan 28, 2019 5:48 pm Sieht für mich nach einem Kandidaten für Rcpp aus (viele aufrufe, relativ wenig komplexität).
Funktioniert und bringt die gewünschte Schnelligkeit, vielen Dank dafür!
Cool :)
Kannst du für unsere jetztigen und zukünftigen Mitleser noch deine Rcpp Lösung hier posten?
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
Antworten