如何在R中制作三向频率表?

时间:2018-09-26 17:38:24

标签: r frequency crosstab

我正在尝试在 R 中编写一个三向频率表,但是由于我拥有的变量数量而使我绊脚石。我有4列变量,抑郁(是,否,NA-我需要保留NA),不足(是,否,NA),正常(是,否,NA)和肥胖(是,否,NA)。我希望桌子看起来像这样吗?

                      Depression
                 Yes     No     NA
Weight      
Under            70      20     5


Normal           90      68     8


Obese            40      20     6

我尝试做交叉表,但是这会给我一张表格,其中包括癌症作为城市之一:(非常感谢晚期的帮助!

顺便说一句,我已经尝试过使用表格包中的表格,但是在我制作降价促销时却给了我一个错误

3 个答案:

答案 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()