如果我們將所有字符列factor
s設置爲'A','B','C','D',那麼我們可以使用xtabs
而不丟棄任何列。
不幸的是,由此產生的矩陣是不對稱的。
library('tidyverse')
df <- tribble(
~var1, ~var2, ~value,
'A', 'B', 4,
'C', 'D', 5,
'D', 'A', 2,
'B', 'D', 1
)
df %>%
mutate_if(is.character, factor, levels=c('A', 'B', 'C', 'D')) %>%
xtabs(value ~ var1 + var2, ., drop.unused.levels = F)
# var2
# var1 A B C D
# A 0 4 0 0
# B 0 0 0 1
# C 0 0 0 5
# D 2 0 0 0
爲了使其對稱,我只是將其轉置添加到自身。雖然這感覺像是一種黑客。
df %>%
mutate_if(is.character, factor, levels=c('A', 'B', 'C', 'D')) %>%
xtabs(value ~ var1 + var2, ., drop.unused.levels = F) %>%
'+'(., t(.))
# var2
# var1 A B C D
# A 0 4 0 2
# B 4 0 0 1
# C 0 0 0 5
# D 2 1 5 0
請張貼你已經嘗試過的許多功能,爲什麼它沒有工作 – PoGibas
'XTABS(值〜VAR1 + VAR2,DF)'? – Sotos
@Sotos這會錯過欄'C' – PoGibas