我有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
。
那么,连接没有类似列的表的替代方法是什么?
感谢您的帮助,
答案 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个,谁知道?