我使用table
命令在R
中生成两个表。我想创建一个表格/数据框/矩阵,使得来自两个表格的所有名称都被表示,并且输出中包含适当的“零”计数。例如如何在R中获得两个列表?
我目前拥有的数据看起来是如下
表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中执行此操作?
我使用table
命令在R
中生成两个表。我想创建一个表格/数据框/矩阵,使得来自两个表格的所有名称都被表示,并且输出中包含适当的“零”计数。例如如何在R中获得两个列表?
我目前拥有的数据看起来是如下
表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中执行此操作?
无重塑:
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
忽略什么,我认为是你的问题一个错字(该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)
然后将NA转换为零。
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
演示如何在R中编写(和使用)函数的好方法。 – 2011-06-08 10:29:29
嗨!这是一个很好的解决方案和一个很好的演示。谢谢。 – Sam 2011-06-08 11:24:17
通过短短的头发打我! ;) – joran 2011-06-07 21:05:13
+1认为你需要融合之前融化。 – diliop 2011-06-07 21:05:18
谢谢@EDi,这是一个救生员。 – Sam 2011-06-07 21:16:30