2013-07-14 5 views
2

У меня есть набор данных, который выглядит следующим образом. Я использую R для работы над этими данными. Первые три столбца (год, id и var) составляют часть необработанных данных. Мне нужно создать новую переменную ans следующим образом:Создание условных фиктивных идентификаторов

Если var = 1, то для каждого года (где var = 1) мне нужно создать новый манекен ans, который принимает значение 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 

Любая помощь в отношении того, как достичь этого, очень ценится.

Благодаря Anup

ответ

1

ddply Использование с transform и any:

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 Обратите внимание, что реорганизует по дизайну.

Смежные вопросы