1

我是 R 的菜鸟。我想创建一个所有虚拟变量的频率表,我有这样的数据

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() ,但我一次只能做一个变量。我有很多时间严重的虚拟变量,我想看看它们的趋势。

非常感谢特伦斯的帮助

4

2 回答 2

1

mtabulate这是使用和的另一个选项addmargins

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
于 2016-03-31T03:23:34.133 回答
1
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将函数应用于数据框的每一列并返回一个矩阵。所以sapply(dat[,-1], table)返回一个矩阵,table每列的输出为 (第一列除外,我们已排除)。

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

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

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

于 2016-03-30T16:55:32.763 回答