如果我们将所有字符列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