Ich habe folgende Datenrahmen:Compute bedeuten paarweise Kovarianz zwischen den Elementen in einer Liste
# df1
id cg_v
1 a
2 b
3 a b
4 b c
5 b c d
6 d
# df2
id cg
1 a
2 b
3 a
3 b
4 b
4 c
5 b
5 c
5 d
6 d
Ich brauche eine Spalte df1
hinzuzufügen, die die Kovarianz über jedes Paar von Elementen in cg_v
berechneten Mittel enthält. Wenn cg_v
nur ein Element enthält, möchte ich, dass die neue Spalte ihre Varianz enthält.
Ich kann von cov(crossprod(table(df2)))
# a b c d
a 0.9166667 0.0000000 -0.5833333 -0.6666667
b 0.0000000 2.0000000 1.0000000 0.0000000
c -0.5833333 1.0000000 0.9166667 0.3333333
d -0.6666667 0.0000000 0.3333333 0.6666667
eine Kovarianzmatrix erhalten Was kann ich tun, von hier aus?
Das Endergebnis sollte wie folgt sein:
# df1
id cg_v cg_cov
1 a 0.9166667
2 b 2.0000000
3 a b 0.0000000
4 b c 1.0000000
5 b c d 0.4444444 # This is equal to (1.0000000 + 0.3333337 + 0.0000000)/3
6 d 0.6666667
-Code df1
und df2
zu generieren:
df1 <- structure(list(id = c(1L, 2L, 3L, 4L, 5L, 6L),
cg_v = c("a", "b", "a b", "b c", "b c d", "d")),
.Names = c("id", "cg_v"),
class = "data.frame", row.names = c(NA, -6L))
df2 <- structure(list(id = c(1L, 2L, 3L, 3L, 4L, 4L, 5L, 5L, 5L, 6L),
cg = c("a", "b", "a", "b", "b", "c", "b", "c", "d", "d")),
.Names = c("id", "cg"),
class = "data.frame", row.names = c(NA, -10L))
Nein, ich würde den Mittelwert von cov (b, c), cov (c, d) und cov (b, d) benötigen. Das ist (1,0000000 + 0,3333337 + 0,0000000)/3 = 0,44444444. – Michele
Ich bearbeite meine Lösung so, dass es funktioniert, wenn mehr Buchstaben verwendet werden –
Es funktioniert mit dem Beispiel, aber nicht in meinen Daten. Ich bekomme einen Fehler, wenn ich 'mat <- sapply (mat, Funktion (x) Matrix (combn (x, 2), nrow = 2))'. Der Fehler ist: 'Fehler in combn (x, 2): n
Michele