2013-07-14 49 views
2

我有一个如下所示的数据集。我正在使用R来处理这些数据。前三列(年份,id和var)构成了原始数据的一部分。我需要创建新的变量ans,如下所示生成条件伪代码

如果var = 1,那么对于每年(其中var = 1),我需要创建一个新的虚拟ans,对于所有对应的id,其值为1记录var = 1的实例。具有预期输出(ans)的样本数据如下所示。

year  id  var  ans 
2010  1  1  1 
2010  2  0  0 
2010  1  0  1 
2010  1  0  1 
2011  2  1  1 
2011  2  0  1 
2011  1  0  0 
2011  1  0  0 

任何帮助如何实现这一点非常感谢。

感谢 阿努普

回答

1

使用ddplytransformany

DF <- read.table(text=" year  id  var  ans 
2010  1  1  1 
2010  2  0  0 
2010  1  0  1 
2010  1  0  1 
2011  2  1  1 
2011  2  0  1 
2011  1  0  0 
2011  1  0  0", header=TRUE) 

library(plyr) 
ddply(DF,.(year,id),transform, ans2 = as.numeric(any(var==1))) 

# year id var ans ans2 
# 1 2010 1 1 1 1 
# 2 2010 1 0 1 1 
# 3 2010 1 0 1 1 
# 4 2010 2 0 0 0 
# 5 2011 1 0 0 0 
# 6 2011 1 0 0 0 
# 7 2011 2 1 1 1 
# 8 2011 2 0 1 1 

注意ddply重新排序设计。