Sie möchten die Ressourcenzuweisung verringern, indem Sie den Namen jeder Ressource durchlaufen und die zugeordneten Konten nach diesem Namen durchsuchen, indem Sie eine Person zufällig auswählen und den Namen dieser Person durch NA ersetzen.Zufällige Unterteilung jeder Gruppe, um die Bedingungen zu erfüllen
reproduzierbares Beispiel:
Accts <- paste0("Acc", 1:200)
Value <- c(500, 2000, 5000, 1000)
AccountDF <- data.frame(Accts, Value)
AccountDF$Owner[1:200] <- NA
AccountDF$Owner[1:23] <- "Jeff"
AccountDF$Owner[24:37] <- "Alex"
AccountDF$Owner[38:61] <- "Steph"
AccountDF$Owner[62:111] <- "Matt"
AccountDF$Owner[112:141] <- "David"
library(dplyr)
OwnerDF <- AccountDF %>%
group_by(Owner) %>%
summarise(Count = n(),
TotalValue = sum(Value)) %>%
filter(!is.na(Owner))
Wo ich so weit gekommen:
for (p in 1:nrow(OwnerDF)){
while (AccountDF$Count[p] > 22){
AccountDF %>%
filter(Owner == OwnerDF$Owner[p]) %>%
sample_n(1)
}
}
Ich habe gehört, dass für Schleifen unnötig sind. Ich bin sicher, dass dies mit dem schnurren Paket und pmap oder so etwas getan werden kann. Ich lerne noch.
Ich würde gerne durch die OwnerDF iterieren und schauen, ob diese Person zu viele Konten "besitzt". Wenn ja, sehen Sie sich die ursprüngliche Kontoliste an und wählen Sie eine zufällige aus und ersetzen Sie den Namen des Besitzers durch NA, entfernen Sie 1 aus ihrer Zählung und fahren Sie fort.
Schließlich nach dem Ausrechnen würde ich gerne sehen, ob es mit mehreren Bedingungen gemacht werden kann .. wie While (Count> 22 & Wert> $ 40.000), oder vielleicht zwei while-Schleifen. Das Ziel ist es, die "eigenen" Konten jeder Person auf weniger als einen bestimmten Schwellenwert zu reduzieren und auf einen bestimmten Schwellenwert zu reduzieren.
Erstaunlich. Vielen Dank Frank. Arbeitete perfekt. Ich hätte nie an eine solche Lösung gedacht. Ich weiß nicht viel über Zufallsgenerierung. Eine andere Frage für Sie. Angenommen, ich habe einen Grenzwert für jeden Wert und jede Zahl, und wenn jemand eine niedrige Anzahl, aber einen hohen Wert hat, möchte ich ein zufälliges Konto von ihren hohen Konten nehmen, wenn sie eine hohe Anzahl und einen niedrigen Wert haben, möchte ich niedrig nehmen Wertkonten von ihnen weg. Wie kann ich das aus einer zufälligen Perspektive tun? –
@MattW. Interessante Frage. Sie würden wahrscheinlich eine benutzerdefinierte Funktion rollen, um damit umzugehen. Ich habe etwas zur Antwort hinzugefügt. – Frank
Sie haben mich mit dem letzten Teil Ihrer Erklärung ein bisschen verloren, haha. Auch - ich habe versucht, Ihre Lösung auf meinen Datensatz anzuwenden und ich kann es nicht zum Laufen bringen. Es zerbricht mit dem mutierten Ersatz. Ich kann nicht herausfinden, was ich falsch mache. –