0
元件之間的成對協方差我有以下的數據幀:計算意味着在一個列表
# 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
我需要將列添加到df1
包含在cg_v
橫過每對元件的計算出的平均方差。如果cg_v
只包含一個元素,那麼我希望新列包含其方差。
我可以通過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
我怎麼在這裏做了協方差矩陣?
最終的結果應該是這樣的:
# 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
代碼生成df1
和df2
:
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))
不,我將需要cov(b,c),cov(c,d)和cov(b,d)的均值。那是(1.0000000 + 0.3333337 + 0.0000000)/ 3 = 0.4444444。 – Michele
我編輯我的解決方案,使其工作,如果使用更多的字母 –
它適用於該示例,但不適用於我的數據。運行'mat < - sapply(mat,function(x)matrix(combn(x,2),nrow = 2))'時出錯。錯誤是:'combn(x,2)中的錯誤:n
Michele