【发布时间】:2021-04-01 12:46:12
【问题描述】:
示例数据:
set0 <- data.frame(A = c("A", "B", "C", "D", "A", "B", "C", "D", "A", "B"),
B = c("E", "F", "G", "H", "I", "E", "F", "G", "H", "I"))
部分列需要合并:
set0 <- table(transform(set0,
B = ifelse(B %in% c('F', 'G'), 'V',
ifelse(B %in% c('H', 'I'), 'R', B))))
> set0
B
A E R V
A 1 2 0
B 1 1 1
C 0 0 2
D 0 1 1
然后我使用 chisq.test$expected 得到我需要的结果:
cset0 <- chisq.test(set0)$expected %>% round(digits = 2)
> cset0
B
A E R V
A 0.6 1.2 1.2
B 0.6 1.2 1.2
C 0.4 0.8 0.8
D 0.4 0.8 0.8
我将 addmargins(set0) 排除在前一个之外,否则它会改变 chisq.test 结果的结果。因此创建一个新表:
mset0 <- addmargins(set0)
> mset0
B
A E R V Sum
A 1 2 0 3
B 1 1 1 3
C 0 0 2 2
D 0 1 1 2
Sum 2 4 4 10
我正在尝试将 mset0 和 cset0 合并为一个,看起来有点像:
# B
#A | E | R | V | Sum
# A | 1 [0.6]| 2 [1.2]| 0 [1.2]| 3
# B | 1 [0.6]| 1 [1.2]| 1 [1.2]| 3
# C | 0 [0.4]| 0 [0.8]| 2 [0.8]| 2
# D | 0 [0.4]| 1 [0.8]| 1 [0.8]| 2
# sum| 2 | 4 | 4 | 10
【问题讨论】: