R 如何在3d应急选项卡中选择部分表格?
这似乎是个新问题,但我就是搞不懂。我正在看一个3d列联表,我想对部分表进行分析。以下是一些示例数据:R 如何在3d应急选项卡中选择部分表格?,r,contingency,R,Contingency,这似乎是个新问题,但我就是搞不懂。我正在看一个3d列联表,我想对部分表进行分析。以下是一些示例数据: df2 <- data.frame(Gender = c(rep("M", 6), rep("F", 6)), Beliefs = c(rep("Fund", 2), rep("Mod", 2), rep("Liberal", 2), rep("Fund", 2), rep("Mod", 2), rep("Liberal", 2)), Afterlife = c(rep(c("Yes",
df2 <- data.frame(Gender = c(rep("M", 6), rep("F", 6)), Beliefs = c(rep("Fund", 2), rep("Mod", 2), rep("Liberal", 2), rep("Fund", 2), rep("Mod", 2), rep("Liberal", 2)), Afterlife = c(rep(c("Yes", "No"), 6)), Count = c(252, 43, 274, 47, 226, 100, 420, 50, 415, 50, 273, 83))
df2.tab <- xtabs(Count ~ Beliefs + Afterlife + Gender, data = df2)
df2以下是一个示例,试图解释apply
在这里是如何有用的:
printchk <- function(x) {print(x); print(class(x)); cat("------\n")}
tab <- array(1:8,dim=c(2,2,2))
printchk(tab)
#, , 1
#
# [,1] [,2]
#[1,] 1 3
#[2,] 2 4
#
#, , 2
#
# [,1] [,2]
#[1,] 5 7
#[2,] 6 8
#
#[1] "array"
#------
跨地层使用组合柱
invisible(apply(tab, 1, printchk))
# [,1] [,2]
#[1,] 1 5
#[2,] 3 7
#[1] "matrix"
#------
# [,1] [,2]
#[1,] 2 6
#[2,] 4 8
#[1] "matrix"
#------
invisible(apply(tab, 2, printchk))
# [,1] [,2]
#[1,] 1 5
#[2,] 2 6
#[1] "matrix"
#------
# [,1] [,2]
#[1,] 3 7
#[2,] 4 8
#[1] "matrix"
#------
与地层打交道
invisible(apply(tab, 3, printchk))
# [,1] [,2]
#[1,] 1 3
#[2,] 2 4
#[1] "matrix"
#------
# [,1] [,2]
#[1,] 5 7
#[2,] 6 8
#[1] "matrix"
#------
因此,在不更改维度或结构的情况下,您可以使用apply
调用比较数组的不同部分
oddsratio <- function(x) (x[1,1]/x[2,1]) / (x[1,2]/x[2,2])
apply(tab, 1, oddsratio)
##Expecting: (1/3)/(5/7) = 0.46
## (2/4)/(6/8) = 0.66
#[1] 0.4666667 0.6666667
你的意思是像apply(df2.tab,3,chisq.test)
这样的东西吗?我正在为每个性别组运行chisq.test
<代码>应用
可以处理任何维度和维度组合,而不仅仅是行和列,您的预期输出是什么?正如最近的邮件所说,您是否需要应用(df2.tab,3,demateols::oddsratio)
?我想这就是我想要的。我考虑的更多是选择一个部分表,就像使用$选择一个对象的元素一样简单,而不是在本例中创建一个全新的表,其中信念是分组变量,然后对其使用apply。但最终我认为,通过apply方法,如果不是更少的话,工作量也是一样的。@Michael-aperm
也可以用来“旋转”表格的维度,例如:aperm(df2.tab,c(1,3,2))
不知道该函数。和apply一起,我想这就是我想要的。谢谢大家!那么维度的各个部分呢?假设数组是2x4x2,但您只对边缘关联感兴趣,所以您正在查看2x4表。但这本身就有一系列的部分表可以应用于x[,c(1,4)]。如何使用一个函数覆盖数组中的所有2x2部分表?我想你必须为此编写某种函数,对吗?@Michael-我看看我是否理解正确,你想比较所有2x2表的可能性,比如c(1,2)
c(1,3)
c(1,3)c(1,4)c(2,3)等吗?我认为您必须在apply
-ed函数中使用类似combn
的内容。它开始变得越来越复杂,但它是可行的:apply(tab,3,function(x)combn(ncol(x),2,FUN=function(y)chisq.test(x[,y]),simplify=FALSE))
invisible(apply(tab, c(1,2), printchk))
#[1] 1 5
#[1] "integer"
#------
#[1] 2 6
#[1] "integer"
#------
#[1] 3 7
#[1] "integer"
#------
#[1] 4 8
#[1] "integer"
#------