如何在R中一起获得两个列表?

时间:2011-06-07 20:44:08

标签: r dataframe

我使用table中的R命令生成两个表。我想创建一个表/数据帧/矩阵,以便表示两个表中的所有名称,并在输出中包含正确的“零”计数。 e.g。

我目前拥有的数据如下所示

表1

A   B   C
1   2   4

表2

C   D   E
3   4   4

我想输出如下:

    Table1 Table2
A        1      0
B        2      0
C        4      3
D        0      4
E        0      4

我怎样才能在R?

中这样做

3 个答案:

答案 0 :(得分:5)

没有重塑:

t1 <- table(c("A", rep("B", 2), rep("C", 4)))
t2 <- table(c(rep("C", 3), rep("D", 4), rep("E", 4)))

ndf <- merge(t1, t2, by = "Var1", all = TRUE)
ndf[is.na(ndf)] <- 0
ndf
  Var1 Freq.x Freq.y
1    A      1      0
2    B      2      0
3    C      4      3
4    D      0      4
5    E      0      4

答案 1 :(得分:3)

忽略我认为是你问题中的拼写错误(C频率应该是4和3,对,而不是2和3?)你可以通过强制转换数据帧然后合并来实现:

t1 <- table(rep(LETTERS[1:3],times=c(1,2,4)))
t2 <- table(rep(c("C","D",'E'),times=c(3,4,4)))
merge(as.data.frame(t1),as.data.frame(t2),by="Var1",all=T)

然后将NAs转换为零。

答案 2 :(得分:2)

DATA

dat <- list(rep(LETTERS[1:3],times=c(1,2,4)),rep(LETTERS[3:5],times=c(3,2,2)))

CODE

f <- function(d){
       lev <- unique(unlist(d, use.names=FALSE))
       d <- lapply(d, factor, levels=lev)
       r <- do.call(cbind, lapply(d, table))
       colnames(r) <- paste("Table", seq(NCOL(r)), sep="")
       return(r)
     }

输出

f(dat)
  Table1 Table2
A      1      0
B      2      0
C      4      3
D      0      2
E      0      2