2

我有 5data.frames个 10 行,对应于 10 个政客。我table()用来计算每个data.frame.

所以我得到了 10 个这样的表:

grpol.1 <- table(df1$group_pol)
grpol.1
  NI RRDP  SRC  UDI  UMP 
  1    2   3    3    1 
grpol.2
  RRDP  UDI  ECOLO 
  5       4      1 

现在,我想(按列)将所有这些表连接成一个data.frame. 总共有7个政治团体。 请注意,所有这些表的列数都不相同。

我想获得类似的东西:

 group_pol  grpol.1  grpol.2  ... grpol.5
1 NI              1        0
2 RRDP            2        5
3 SRC             3        0
4 UDI             3        4 
5 UMP             1        0
6 GDR             0        0
7 ECOLO           0        1

通常,在这种情况下,我会使用合并。但是,似乎不可能将表转换为data.frames 以进行合并。那么,连接没有相似列的表的替代方法是什么?

感谢帮助,

4

1 回答 1

4

我将从制作一些示例数据开始

grpol.1 <- as.table(c(a=1,b=2, d=3, g=4))
grpol.2 <- as.table(c(b=1, c=2, e=3, f=4))
grpol.3 <- as.table(c(b=198, d=281, e=-12, g=612))

解决它的原始方法是

merge(as.data.frame(grpol.1),
      merge(as.data.frame(grpol.2),
            as.data.frame(grpol.3), by="Var1", all=TRUE),
      by="Var1", all=TRUE)

给你以下输出

  Var1 Freq Freq.x Freq.y
1    a    1     NA     NA
2    b    2      1    198
3    d    3     NA    281
4    g    4     NA    612
5    c   NA      2     NA
6    e   NA      3    -12
7    f   NA      4     NA

However, if you have a lot of tables it is better to keep them in a list so you don't need to write out all their names every time you want to access them.

l <- list(grpol.1, grpol.2, grpol.3)
l <- lapply(l, as.data.frame)
f <- function(x, y) merge(x, y, by="Var1", all=TRUE)
Reduce(f, l)

This is especially important if you want you code to work with an arbitrary number of tables. The next time you run your code you might have 6 tables instead of 5, who knows?

于 2013-09-12T13:27:09.160 回答