2012-07-13 33 views
2

我有一个数据重塑问题,我可以使用一些帮助。使指标变量不在列表中

ID   X1   X2   X3   X4   X5 
6001 Certificate Associate Bachelor's Master's Doctoral 
5001 Certificate Associate Bachelor's   
3311 Certificate Associate Bachelor's   
1981 Certificate Associate Bachelor's Master's 
4001 Associate Bachelor's Master's   
2003 Associate Bachelor's Master's Doctoral 
2017 Certificate Associate      
1001 Associate Bachelor's Master's   
5002 Bachelor's 

我需要到这些虚拟变量

ID Certificate  Associates  Bachelor   Master  Doctoral  
6001    1    1    1    1    1 
5001    1    1    1    0    0 
2017    1    1    0    0    0 

有什么建议?

回答

2

试试reshape2包。我假定你的数据集被称为df

require(reshape2) 
# First, melt your data, using 
m.df = melt(df, id.vars="ID") 
# Then `cast` it 
dcast(m.df, ID ~ value, length) 
#  ID Var.2 Associate Bachelor's Certificate Doctoral Master's 
# 1 1001  2   1   1   0  0  1 
# 2 1981  1   1   1   1  0  1 
# 3 2003  1   1   1   0  1  1 
# 4 2017  3   1   0   1  0  0 
# 5 3311  2   1   1   1  0  0 
# 6 4001  2   1   1   0  0  1 
# 7 5001  2   1   1   1  0  0 
# 8 5002  4   0   1   0  0  0 
# 9 6001  0   1   1   1  1  1 

我没有测试它,但如果你让你订购的因素,它可能控制输出列的顺序。

+0

精美的作品!请问,为什么长度作为演员参数? – user1495088 2012-07-13 19:48:45

+0

“长度”是默认值 - 仅计算该组发生的次数。它是'cast'中的列表。要看看它是如何工作的,用''学生'替代'6001'('df [1,3] ='学士''')代替'Associate'。当你融化并重塑形状时,该行会读取'0 2 1 1 1'。使用数据的方式,它不应该是一个问题,但它也可能有助于确定是否有任何数据输入错误! – A5C1D2H2I1M1N2O1R2T1 2012-07-13 19:58:51

+0

感谢您的帮助 – user1495088 2012-07-14 21:51:54