R将几个列联表合并为一个
R merging several contingency tables into one
我有以下列联表列表
structure(list(`1` = structure(c(1L, 1L, 1L, 0L, 1L, 0L), .Dim = 2:3, .Dimnames = structure(list(
c("a", "b"), c("x", "y", "z")), .Names = c("", "")), class = "table"),
`2` = structure(c(1L, 1L, 0L, 1L), .Dim = c(2L, 2L), .Dimnames = structure(list(
c("b", "c"), c("y", "z")), .Names = c("", "")), class = "table")), .Names = c("1", "2"))
该列表有 2 个列联表,我想将它们合并为一个。我尝试了 here 的解决方案,但它没有用。它给出了以下错误
> tapply(T,names(T),sum)
Error in FUN(X[[1L]], ...) : invalid 'type' (list) of argument
预期输出是
> table(x[[1]],x[[2]])
x y z
a 1 1 1
b 1 1 0
c 0 1 1
其中 x
是
structure(list(id = c("a", "a", "a", "b", "b", "c", "c"), upc = c("x","y", "z", "x", "y", "z", "y"), sfactor = c("1", "1", "1", "1","2", "2", "2")), .Names = c("id", "upc", "sfactor"), row.names = c(NA, -7L), class = c("data.table", "data.frame"), .internal.selfref = <pointer: 0x25aa378>)
感谢任何帮助。提前致谢。
将您的表转换为长表 data.frames
,然后收集计数:
xtabs(Freq ~ ., data=do.call(rbind, lapply(L, data.frame) ))
# Var2
#Var1 x y z
# a 1 1 1
# b 1 1 0
# c 0 1 1
在使用 rbindlist
.[=20 对 list
元素进行 rbind
之后,我们还可以将 dcast
与 fun.aggregate
一起用作 sum
=]
library(data.table)
dcast(rbindlist(lapply(L, as.data.frame)),
Var1~Var2, value.var="Freq", sum)
# Var1 x y z
#1: a 1 1 1
#2: b 1 1 0
#3: c 0 1 1
如果我们不想要 "Var1" 列,可以使用 acast
(来自 reshape2
)
library(reshape2)
acast(rbindlist(lapply(L, as.data.frame)),
Var1~Var2, value.var="Freq", sum)
# x y z
# a 1 1 1
# b 1 1 0
# c 0 1 1
我有以下列联表列表
structure(list(`1` = structure(c(1L, 1L, 1L, 0L, 1L, 0L), .Dim = 2:3, .Dimnames = structure(list(
c("a", "b"), c("x", "y", "z")), .Names = c("", "")), class = "table"),
`2` = structure(c(1L, 1L, 0L, 1L), .Dim = c(2L, 2L), .Dimnames = structure(list(
c("b", "c"), c("y", "z")), .Names = c("", "")), class = "table")), .Names = c("1", "2"))
该列表有 2 个列联表,我想将它们合并为一个。我尝试了 here 的解决方案,但它没有用。它给出了以下错误
> tapply(T,names(T),sum)
Error in FUN(X[[1L]], ...) : invalid 'type' (list) of argument
预期输出是
> table(x[[1]],x[[2]])
x y z
a 1 1 1
b 1 1 0
c 0 1 1
其中 x
是
structure(list(id = c("a", "a", "a", "b", "b", "c", "c"), upc = c("x","y", "z", "x", "y", "z", "y"), sfactor = c("1", "1", "1", "1","2", "2", "2")), .Names = c("id", "upc", "sfactor"), row.names = c(NA, -7L), class = c("data.table", "data.frame"), .internal.selfref = <pointer: 0x25aa378>)
感谢任何帮助。提前致谢。
将您的表转换为长表 data.frames
,然后收集计数:
xtabs(Freq ~ ., data=do.call(rbind, lapply(L, data.frame) ))
# Var2
#Var1 x y z
# a 1 1 1
# b 1 1 0
# c 0 1 1
在使用 rbindlist
.[=20 对 list
元素进行 rbind
之后,我们还可以将 dcast
与 fun.aggregate
一起用作 sum
=]
library(data.table)
dcast(rbindlist(lapply(L, as.data.frame)),
Var1~Var2, value.var="Freq", sum)
# Var1 x y z
#1: a 1 1 1
#2: b 1 1 0
#3: c 0 1 1
如果我们不想要 "Var1" 列,可以使用 acast
(来自 reshape2
)
library(reshape2)
acast(rbindlist(lapply(L, as.data.frame)),
Var1~Var2, value.var="Freq", sum)
# x y z
# a 1 1 1
# b 1 1 0
# c 0 1 1