合并两个列联表

时间:2015-03-20 09:46:13

标签: r

我使用table()生成了两个列联表。

R> first
0   5  11  17  19  50  95 100 
48   1   1   1   1   1   1   6

R> second
0  11  17  30  33  50  67  83 100 
67   1   1   1   1   2   2   2   8

我想用0频率填充缺少元素的两个表。例如,我希望这些看起来像这样:

R> first
0  5  11  17  19  30  33  50  67  83  95 100 
48  1   1   1   1   0   0   1   0   0   1   6

R> second
0  5  11  17  19  30  33  50  67  83  95 100 
67  0   1   1   0   1   1   2   2   2   0   8

1 个答案:

答案 0 :(得分:2)

<强> 1。第一个选项

我们可以将矢量转换为指定级别的因子类,然后执行table。在创建的示例中。 table输出,&#39; v1&#39;的一些元素在第一个&#39;中缺少

  first
  # 0   5  11  17  19  50  95 100 
  #48   1   1   1   1   1   1   6 

假设,如果我们返回获取初始向量,请将其转换为因子,方法是将levels指定为&#39; v1&#39;在致电table

之前
   table(factor(rep(names(first), first), levels=v1))
   #  0   5  11  17  19  30  33  50  67  83  95 100 
   #48   1   1   1   1   0   0   1   0   0   1   6 

第二个&#39;

可以做同样的事情

<强> 2。第二个选项

而不是回头并改变因素&#39;我们也可以通过创建第三个&#39;来获得所需的输出。表&#39; 0s&#39;对于所有唯一元素,请同时填充表格,删除重复元素,排序..

 Un <- union(names(first), names(second))
 third <- as.table(setNames(rep(0, length(Un)), Un))
 first1 <- c(first, third)
 first2 <- first1[!duplicated(names(first1))]
 as.table(first2[order(as.numeric(names(first2)))])
 #   0   5  11  17  19  30  33  50  67  83  95 100 
 #  48   1   1   1   1   0   0   1   0   0   1   6 

数据

v1 <- c(0, 5, 11, 17, 19, 30, 33, 50, 67, 83, 95, 100)
first <- structure(c(48, 1, 1, 1, 1, 1, 1, 6), .Dim = 8L, 
.Dimnames = list(
c("0", "5", "11", "17", "19", "50", "95", "100")), class = "table")

second <- structure(c(67, 1, 1, 1, 1, 2, 2, 2, 8), 
.Dim = 9L, .Dimnames = list(
 c("0", "11", "17", "30", "33", "50", "67", "83", "100")), 
 class = "table")