如果我们将所有的字符列都变成因子,使用水平为“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)
为使其对称,我只需将其转置并加到自身。虽然这感觉有点像一个技巧。
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
xtabs(value~var1+var2, df)
? - SotosC
。 - pogibascomatrix <- data.frame(var1 = data3$u1.var1, scores = data3$value, var2= factor(data3$var2,levels=unique(data3$var2))) acast(comatrix, formula = var1 ~ var2, fill = 0, value.var ="scores", fun.aggregate =sum, drop = FALSE)
通过这段代码,我得到了一个矩阵,但不是方阵。 - Brenna