我是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(),但我一次只能做一个变量。 我有很多时间认真的虚拟变量,我想看看它们的趋势。
非常感谢你的帮助 特伦斯
答案 0 :(得分: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
(转置)函数。
我们需要一个数据框,而不是一个矩阵,所以我们将整个内容包装在as.data.frame
中。
接下来,我们希望另一列给出值的总数,因此我们使用rowSums
函数。
答案 1 :(得分: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