überschreitet habe ich eine Datenbank, bestehend ausFilter innerhalb von Gruppen, wobei x ersten y
- Nachbarschaft IDs für die Heimatstadtteile (id_h),
- Block-IDs für die Heimblocks (
blk_h
, - eine Unter Geographie von Nachbarschaften),
- Arbeitsblöcke (
blk_w
), - die Strömung der Pendler zwischen den beiden (
Flow
), - der mittlere Pendler pro Wohnviertel (
Med_C
) und - der kumulative Arbeiterfluss von zu Hause Nachbarschaft (
CumFlow
).
Die Daten werden durch den Abstand zwischen blk_h
und blk_w
(absteigend) sortiert, gruppiert nach id_h
. Ich muss die Daten aufteilen, um den Fall für jede Wohngegend zu extrahieren, in der CumFlow
FIRST gleich oder größer ist als Med_C
.
Ich habe eine Vielzahl von dplyr-Funktionen ausprobiert und kann es nicht funktionieren. Hier ein Beispiel:
df <- data.frame(
id_h=c("A","A","A","A","B","B","B"),
blk_h=c("A1","A1","A2","A2","B1","B2","B2"),
blk_w=c("W1","W2","W3","W3","W1","W2","W2"),
dist=c(4.3,5.6,7.0,8.7,5.2,6.5,6.8),
Flow=c(3,6,3,7,5,4,2),
CumFlow=c(3,9,12,19,5,9,11),
Med_C=c(10,10,10,10,6,6,6)
)
df
Ich brauche dafür eine Tabelle wie folgt zurück:
id_h blk_h blk_w dist Flow CumFlow Med_C
A A2 W3 7.0 3 12 10
B B2 W2 6.5 4 9 6
Und hier sind einige der Dinge, die ich habe versucht, dies zu verwirklichen: Versuch # 1
library(dplyr)
df.g <- group_by(df, id_h)
df.g2 <- filter(df.g, CumFlow == which.min(CumFlow >= Med_C))
Versuch # 2
library(data.table)
setDT(df)[, .SD[which.min(CumCount >= Med_C)], by = id_h]
Versuch # 3
library(dplyr)
test <- df %>% group_by(id_h) %>% filter(min(CumFlow) >= Med_C)
Ich glaube, ich bin Missverständnis, wie die which.min
Funktion verwenden. Jeder Rat wird sehr geschätzt.
Ja, es ist Verwirrung von 'which.min', die findet das erste Minimum statt des ersten wahren Wertes; und wenn alle Werte gleich sind, gibt 1 zurück. Sie können 'head (welches (CumFlow> = Med_C), 1)' anstelle von which.min hier verwenden. – Frank
@majom Ich erwähnte dies auch das letzte Mal: Bearbeite Tags nicht in Fragen, die auf den Antworten basieren. – Frank
@ Frank: Die Frage in diesem Fall fragt speziell, wie man mit 'data.table' dazu kommt. Somit ist das Tag legitim. Siehe Versuch "# 2' library (data.table); setDT (df) [, .SD [which.min (CumCount> = Med_C)], by = id_h] '". Für allgemeine Richtlinien zum Tagging siehe http://meta.stackexchange.com/questions/37672/when-should-you-edit-tags – majom