使用table()在R中创建3个变频表

Ali*_*ett 7 r frequency

我是R的新手并寻求帮助.我理解以下问题相当简单,并寻找类似的问题.没有给出我正在寻找的答案 - 任何帮助将不胜感激.

问题:

使用table()三个变量的函数生成频率表,格式为:

    Var1    Var2   Var3
1   0        1        0
2   0        1        0
3   1        1        1
4   0        0        1
Run Code Online (Sandbox Code Playgroud)

其中,0 ="否",1 ="是"

最终表格采用以下格式,变量和值标记为:

           Var3
           Yes   No
Var1  Yes   1     0
      No    1     2
Var2  Yes   1     2
      No    1     0
Run Code Online (Sandbox Code Playgroud)

到目前为止我尝试了什么:

使用下面的代码,我能够生成一个2变量表,其中包含变量的标签,但不包含值(即No和Yes).

table(data$Var1, data$Var3, dnn = c("Var1", "Var3"))
Run Code Online (Sandbox Code Playgroud)

它看起来像这样:

      Var3
Var1  0  1
   0  2  1
   1  0  1
Run Code Online (Sandbox Code Playgroud)

在尝试标记行和列值(0 =否和1 =是)时,我理解row.names并且responseName可以使用,但是以下标记行名称的尝试会产生all arguments must have the same length错误.

> table(data$Var1, data$Var2, dnn = c("Var1", "Var2"), row.names = c("No", "Yes"))
Run Code Online (Sandbox Code Playgroud)

我也尝试过使用ftable()下面代码生成的表格形状不正确导致问题的频率不正确.标记行和列值的问题仍然存在.

> ftable(data$Var1, data$Var2, data$Var3, dnn = c("Var1", "Var2", "Var3"))
      Var3  0  1
Var1 Var2             
0     0     0  1
      1     2  0
1     0     0  0
      1     0  1
Run Code Online (Sandbox Code Playgroud)

任何帮助table()用于生产所需形状的桌子都将非常感激.

akr*_*run 5

你可以尝试tabularlibrary(tables)改变标签后@thelatemail作为显示

library(tables)
data[] <- lapply(data, factor, levels=1:0, labels=c('Yes', 'No'))
tabular(Var1+Var2~Var3, data=data)

 #         Var3   
 #         Yes  No
 #Var1  Yes 1    0 
 #      No  1    2 
 #Var2  Yes 1    2 
 #      No  1    0 
Run Code Online (Sandbox Code Playgroud)

数据

data <- structure(list(Var1 = c(0L, 0L, 1L, 0L), Var2 = c(1L, 1L, 1L, 
0L), Var3 = c(0L, 0L, 1L, 1L)), .Names = c("Var1", "Var2", "Var3"
), class = "data.frame", row.names = c("1", "2", "3", "4"))
Run Code Online (Sandbox Code Playgroud)


cha*_*ers 1

最简单的方法可能是使用该reshape2包。首先,您需要将数字信息转换为因子,以便它不会将其视为数字。

data$Var1 <- as.factor(data$Var1)
data$Var2 <- as.factor(data$Var2)
data$Var3 <- as.factor(data$Var3)
Run Code Online (Sandbox Code Playgroud)

然后您可以轻松地申请table(data)以获得您想要的信息。如果您确实想将其转换为您指定的格式,请将其拉​​取为 a data.frame,然后根据需要进行转换:

df <- as.data.frame(table(data))
library(reshape2)
dcast(df, Var1+Var2 ~ Var3)
Run Code Online (Sandbox Code Playgroud)

这是输出:

  Var1 Var2 0 1
1    0    0 0 1
2    0    1 2 0
3    1    0 0 0
4    1    1 0 1
Run Code Online (Sandbox Code Playgroud)

编辑:一旦满足所有因素,您就可以ftable在数据框上使用:

> ftable(data)
          Var3 0 1
Var1 Var2         
0    0         0 1
     1         2 0
1    0         0 0
     1         0 1
Run Code Online (Sandbox Code Playgroud)