【问题标题】:Merge two tables with uneven columns and keep both values合并两个列不均匀的表并保留两个值
【发布时间】: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

【问题讨论】:

    标签: r merge


    【解决方案1】:

    您可以从mset0 中删除最后一行和最后一列并替换。

    mset0[-nrow(mset0), -ncol(mset0)] <- sprintf('%s [%s]', mset0[-nrow(mset0), -ncol(mset0)], cset0)
    
    mset0
    #   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 
    

    【讨论】:

      猜你喜欢
      • 2021-06-26
      • 2013-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 2016-10-18
      相关资源
      最近更新 更多