如何创建 table 显示 r 中所有虚拟变量的频率

How to create a table shows frequency of all dummy variables in r

我是R的菜鸟。 我想创建所有虚拟变量的频率 table,并且我有这样的数据

ID Dummy_2008 Dummy_2009 Dummy_2010 Dummy_2011 Dummy_2012 Dummy_2013
1  1          1          0          0          1          1
2  0          0          1          1          0          1
3  0          0          1          0          0          1
4  0          1          1          0          0          1
5  0          0          0          0          1          0
6  0          0          0          1          0          0

我想看看每个变量的总频率如何

            0    1   sum
Dummy_2008  5    1   6
Dummy_2009  4    2   6
Dummy_2010  3    3   6
Dummy_2011  4    2   6
Dummy_2012  4    2   6
Dummy_2013  2    4   6

我只知道使用 table() ,但我一次只能做一个变量。 我有很多时间严重的虚拟变量,我想看看它们的趋势。

非常感谢您的帮助 特伦斯

result = as.data.frame(t(sapply(dat[,-1], table)))        
result$Sum = rowSums(result)

           0 1 Sum
Dummy_2008 5 1   6
Dummy_2009 4 2   6
Dummy_2010 3 3   6
Dummy_2011 4 2   6
Dummy_2012 4 2   6
Dummy_2013 2 4   6

解释:

sapply 将函数应用到数据框的每一列和 returns 矩阵。所以 sapply(dat[,-1], table) returns 一个矩阵,每列的输出为 table (第一列除外,我们已将其排除)。

矩阵需要转置,以便原始数据框中的列名是行,虚拟值是列,因此我们为此使用 t(转置)函数。

我们想要一个数据框,而不是矩阵,所以我们将整个东西包装在 as.data.frame

接下来,我们想要另一列给出值的总数,因此我们使用 rowSums 函数。

这是另一个使用 mtabulateaddmargins

的选项
library(qdapTools)
addmargins(as.matrix(mtabulate(df1[-1])),2)
#           0 1 Sum
#Dummy_2008 5 1   6
#Dummy_2009 4 2   6
#Dummy_2010 3 3   6
#Dummy_2011 4 2   6
#Dummy_2012 4 2   6
#Dummy_2013 2 4   6