使用table()在R

时间:2015-05-25 05:29:52

标签: r frequency

我是R的新手并寻求帮助。我理解以下问题相当简单,并寻找类似的问题。没有给出我正在寻找的答案 - 任何帮助都会受到赞赏。

问题:

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

    Var1    Var2   Var3
1   0        1        0
2   0        1        0
3   1        1        1
4   0        0        1

其中,0 =“否”,1 =“是”

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

           Var3
           Yes   No
Var1  Yes   1     0
      No    1     2
Var2  Yes   1     2
      No    1     0

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

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

table(data$Var1, data$Var3, dnn = c("Var1", "Var3"))

看起来像这样:

      Var3
Var1  0  1
   0  2  1
   1  0  1

在尝试标记行和列值时(0 =否和1 =是)我理解row.namesresponseName可以使用,但是下面标记行名称的尝试给出了{{ 1}}错误。

all arguments must have the same length

我也尝试使用> table(data$Var1, data$Var2, dnn = c("Var1", "Var2"), row.names = c("No", "Yes")) 但是使用下面代码生成的表格形状不正确导致问题的频率不正确。标签行和问题的问题col值仍然存在。

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 生成所需形状表格的任何帮助都将非常感激。

2 个答案:

答案 0 :(得分:5)

您可以在更改标签后tabular尝试library(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 

数据

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"))

答案 1 :(得分:1)

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

data$Var1 <- as.factor(data$Var1)
data$Var2 <- as.factor(data$Var2)
data$Var3 <- as.factor(data$Var3)

然后,您可以轻松应用table(data)来获取所需信息。如果您真的想以您指定的格式对其进行转换,请将其拉​​为data.frame,然后根据需要对其进行转换:

df <- as.data.frame(table(data))
library(reshape2)
dcast(df, Var1+Var2 ~ Var3)

这是输出:

  Var1 Var2 0 1
1    0    0 0 1
2    0    1 2 0
3    1    0 0 0
4    1    1 0 1

编辑:您可以在数据框上使用ftable一切因素:

> ftable(data)
          Var3 0 1
Var1 Var2         
0    0         0 1
     1         2 0
1    0         0 0
     1         0 1