2013-07-14 78 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重新排序設計。