我有一个小问题,我认为这应该是微不足道的,但是我想不出一个优雅的解决方案(或正确使用的函数)。
假设我有一个包含两个因子变量的数据框,我想计算它们的共现次数。这应该很容易:
require(tidyverse)
set.seed(5)
example <- tibble(
Var_1 = sample(letters[1:5], 50, replace = TRUE),
Var_2 = sample(letters[1:4], 50, replace = TRUE)
)
table(example)
输出为:
Var_2
Var_1 a b c d
a 4 0 2 1
b 3 4 2 3
c 3 4 0 6
d 3 5 2 0
e 1 0 3 4
但是,由于有更多的独特的因素Var_1
比Var_2
,该表是不对称的,5
通过4
在这种情况下。我将如何强制表格对称,并对两个维度使用更长的唯一因子向量?
即,在此示例中,5
通过5
表,如下所示:
Var_2
Var_1 a b c d e
a 4 0 2 1 0
b 3 4 2 3 0
c 3 4 0 6 0
d 3 5 2 0 0
e 1 0 3 4 0
我唯一想到的是手动检查其中哪些条目Var_1
不出现Var_2
并添加零列,但是也许有更好的解决方案?谢谢。
所有列均转换example
成factors
相同levels
。
all_vec <- sort(unique(unlist(example)))
example[] <- lapply(example, factor, levels = all_vec)
table(example)
# Var_2
#Var_1 a b c d e
# a 4 0 2 1 0
# b 3 4 2 3 0
# c 3 4 0 6 0
# d 3 5 2 0 0
# e 1 0 3 4 0
如果您想要一个tidyverse
答案:
library(dplyr)
library(tidyr)
example %>%
mutate(across(everything(), factor, levels = all_vec)) %>%
count(Var_1, Var_2, .drop = FALSE) %>%
pivot_wider(names_from = Var_1, values_from = n, values_fill = list(n = 0))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句