Ich habe das Histogramm für eine Reihe von Eigenschaften von verschiedenen einzigartigen Modellen von etwas "Ding". Wenn ich ein Experiment mache, finde ich mehrere dieser einzigartigen Modelle. Ich muss das Histogramm jeder Eigenschaft unter Berücksichtigung des gesamten Probensatzes des Experiments finden.Aggregat Histogramm Daten
Beispiel:
Mit einem Datenrahmen df
wie unten, mit einem Bündel von id's
und für jeden id
gibt es eine Reihe von Eigenschaften prop1
genannt, prop2
und so weiter.
set.seed(1)
df <- data.frame(id = sample(1:5, 6, replace = TRUE),
prop1 = rep(c("A", "B"), 3),
prop2 = sample(c(TRUE, FALSE), 6, replace = TRUE),
prop3=sample(3:6, 6, replace = TRUE))
> df
id prop1 prop2 prop3
1 2 A FALSE 4
2 2 B TRUE 4
3 3 A FALSE 6
4 1 B TRUE 5
5 3 A FALSE 3
6 3 B FALSE 4
Für eqch einzigartige id
ein Histogramm für jede Eigenschaft und das Ergebnis berechnet wird, wird in einer Liste l1
gespeichert, die für jedes Objekt auf einer pro id
Basis des Histogramms hält.
# Create histogram for each property
df[-1] <- lapply(df[-1], as.factor)
fun1 <- function(df, n){as.data.frame(t(sapply(split(df, df$id), function(i)
prop.table(table(i[,n])))))}
l1 <- sapply(2:ncol(df), function(i)fun1(df, i))
names(l1) <- names(df[-1])
> l1
$prop1
A B
1 0.0000000 1.0000000
2 0.5000000 0.5000000
3 0.6666667 0.3333333
$prop2
FALSE TRUE
1 0.0 1.0
2 0.5 0.5
3 1.0 0.0
$prop3
3 4 5 6
1 0.0000000 0.0000000 1 0.0000000
2 0.0000000 1.0000000 0 0.0000000
3 0.3333333 0.3333333 0 0.3333333
Jetzt unten Ich habe einen neuen Satz von ids
von einem neuen Versuch, mit Wiederholungen. Ich muss das Histogramm für jede Eigenschaft über den Satz von id's
mit den Referenzdaten von l1
berechnen.
Einige id's
sind möglicherweise nicht vorhanden; Beispiel 4
in ids
nicht vorhanden ist in l1
- - einige id's
nicht in der ursprünglichen df
und l1
kann in ids
vorliegen jedoch können diese aus dem Histogramm-Berechnung ausgeschlossen werden, jedoch mit ausgeschlossenen id
als Datenrahmen erfasst und für jeden id
zählen ausgeschlossen .
ids <- sample(1:4, 7, replace = TRUE)
> ids
[1] 2 3 1 3 3 2 4
Update: Erwartete Ausgabe - ich bin es als Listen- andere Datenstruktur zeigt, die besser geeignet verwendet werden könnten.
> l2
$prop1
A B
1 0.500 0.500
$prop2
FALSE TRUE
1 0.667 0.333
$prop3
3 4 5 6
1 0.167 0.500 0.167 0.167
Basislösung R bevorzugt.
Aktualisieren: Erläuterung, wie die Ausgabe berechnet wird.
Counts in ids
- ein 1 zwei 2, 3 und drei ein 4. Da wir für 4 irgendwelche Daten nicht über die nützliche ids
sind 1, 2 und 3 mit einer Gesamtzahl von 6 ids
zwischen ihnen.
Für prop1
kann das aggregierte Histogramm für ids
wie folgt berechnet werden
A = (1*0.0 + 2*0.5 + 3*0.6667)/6 = 0.5
B = (1*1.0 + 2*0.5 + 3*0.3333)/6 = 0.5
Ihren neuen Datensatz wird ein anderes Histogramm Recht haben? also willst du deine 'prop.table' w.r.t. die neuen Daten? Können Sie die erwartete Ausgabe einschließen? –
@SandipanDey - hinzugefügte erwartete Ausgabe – user3206440