2

我有一个如下所示的数据集。我正在使用 R 来处理这些数据。前三列(year、id 和 var)构成原始数据的一部分。我需要创建新变量 ans 如下

如果 var=1,那么对于每一年(其中 var=1),我需要创建一个新的虚拟 ans,它为记录了 var=1 实例的所有相应 id 取 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

非常感谢任何有关如何实现这一目标的帮助。

谢谢阿努普

4

1 回答 1

1

ddplytransform和一起使用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按设计重新排序。

于 2013-07-14T13:54:15.053 回答