在R中"添加"两个大表的简单方法?

Gle*_*n_b 8 aggregate r

是否有一种简单的方法可以在R中的两个大表中为每个类别添加计数?

...表中并不存在完全相同的值(尽管它们大多会重叠):

我想要做的一个小例子.设置一些数据:

  x1 <- c(5, 3, 3, 6, 3, 3, 5, 5, 11, 2, 4, 9, 3, 5, 8, 2, 8, 5, 4, 8)
  x2 <- c(6, 10, 9, 17, 6, 7, 8, 11, 5, 12, 14, 5, 11, 7, 7)

  table(x1)
x1
 2  3  4  5  6  8  9 11 
 2  5  2  5  1  3  1  1 

 table(x2)
x2
 5  6  7  8  9 10 11 12 14 17 
 2  2  3  1  1  1  2  1  1  1 
Run Code Online (Sandbox Code Playgroud)

现在我想把这些表组合起来,好像我已经完成了table(c(x1,x2)),得到:

 2  3  4  5  6  7  8  9 10 11 12 14 17 
 2  5  2  7  3  3  4  2  1  3  1  1  1 
Run Code Online (Sandbox Code Playgroud)

但现在想象x1和x2都走了(并且是真正的大,所以我真的 希望从表中重新创建它们实际上做table(c(x1,x2))),我要的是把表t1t2和添加他们(通常很大)计数. ..我可以用几种非常笨重的方式做.

然而,这似乎应该是非常普遍且非常容易解决的问题(实际上,我认为t1 + t2应该适用于具有相同类型的类别的表)但是在我能想到的每个搜索词上搜索问题都没有找到任何东西

我错过了一个非常简单明了的方法吗?

编辑:

为了澄清,像这样的东西(我做过)并不是"简单而明显"的,因为它必须是一个非常常见的表操作:

 m <- merge(t1,t2,by.x="x1",by.y="x2",all=TRUE)
 m[is.na(m)] <- 0
 oo <- order(m$x1)
 t12 <- m[oo,2]+m[oo,3]
 names(t12) <- m[oo,1]
Run Code Online (Sandbox Code Playgroud)

特别是这比蛮力方法更简单,更容易理解.

Aru*_*run 8

另一种使用方式tapply:

tapply(c(t1,t2), names(c(t1,t2)), sum)
# 10 11 12 14 17  2  3  4  5  6  7  8  9 
#  1  3  1  1  1  2  5  2  7  3  3  4  2 
Run Code Online (Sandbox Code Playgroud)

如果你想要一个排序输出,这是:

w <- c(t1,t2)
# edit: Following G.Grothendieck's suggestion to simplify it further
tapply(w, as.numeric(names(w)), sum)
#  2  3  4  5  6  7  8  9 10 11 12 14 17 
#  2  5  2  7  3  3  4  2  1  3  1  1  1 
Run Code Online (Sandbox Code Playgroud)