我正在尝试在 R 中编写一个三向频率表,但是由于我拥有的变量数量而使我绊脚石。我有4列变量,抑郁(是,否,NA-我需要保留NA),不足(是,否,NA),正常(是,否,NA)和肥胖(是,否,NA)。我希望桌子看起来像这样吗?
Depression
Yes No NA
Weight
Under 70 20 5
Normal 90 68 8
Obese 40 20 6
我尝试做交叉表,但是这会给我一张表格,其中包括癌症作为城市之一:(非常感谢晚期的帮助!
顺便说一句,我已经尝试过使用表格包中的表格,但是在我制作降价促销时却给了我一个错误
答案 0 :(得分:1)
常规table
函数可以做到。考虑:
# Mock data:
n <- 100
mys <- function(x) sample(x, size = n, replace = TRUE)
A <- mys(letters[1:3])
B <- mys(LETTERS[1:4])
C <- mys(paste(1:5))
# Three way table:
table(A,B,C, useNA = "always")
#, , C = 1
#
# B
#A A B C D <NA>
# a 0 2 0 1 0
# b 2 1 0 0 0
# c 3 0 2 2 0
# <NA> 0 0 0 0 0
#
#, , C = 2
#
# B
#A A B C D <NA>
# a 2 1 2 2 0
# b 2 4 0 1 0
# c 0 5 5 3 0
# <NA> 0 0 0 0 0
#
# . . .
然后可以根据需要设置参数useNA
。参见?table
。之后,您可以根据需要对3向表进行子集/切片。
答案 1 :(得分:0)
看来您要的不是三向表,而是每个变量有3个类别的双向表。我希望这段代码有用:
matrix1 <- matrix(c(70, 20, 5, 90, 68, 8, 40, 20, 6))
tab <- as.table(matrix(matrix1, nrow = 3, byrow = T,
dimnames = list(Weight = c('Under','Normal','Obese'),
Depression = c('Yes', 'No', 'NA'))))
tab
Depression
Weight Yes No NA
Under 70 20 5
Normal 90 68 8
Obese 40 20 6
答案 2 :(得分:0)
这是一个双向表问题。由于其他人也可能会在这里结束,这里是三路表的简单解决方案:
library(tidyverse)
data %>% select('x','y','z') %>% ftable()