在R中连接几个表

时间:2013-09-12 13:17:14

标签: r

我有5 data.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.frame。 那么,连接没有类似列的表的替代方法是什么?

感谢您的帮助,

1 个答案:

答案 0 :(得分: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

但是,如果您有很多表,最好将它们保存在列表中,这样您每次要访问它们时都不需要写出所有的名称。

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)

如果您希望代码使用任意数量的表,这一点尤为重要。下次运行代码时,您可能有6个表而不是5个,谁知道?