根据r中的条件计算变量

时间:2013-09-27 20:37:31

标签: r

如何在我的数据框中添加一个新列,该列将考虑一些标准,例如:

ID AGE PERNO
1   30   1
1   25   2
2   25   1
2   24   2
2   3    3
3   65   1
3   55   2

以表格结尾:

ID AGE PERNO AGE_HEAD
1   30   1      30 
1   25   2      30
2   25   1      25
2   24   2      25
2   3    3      25 
3   65   1      65
3   55   2      65

在与id

相关的所有行中,几乎都有perno的年龄

2 个答案:

答案 0 :(得分:2)

Plyr解决方案:

 library(plyr)
 ddply(df,.(ID),transform,AGE_HEAD=head(AGE,1))

OR

ddply(df,.(ID),transform,AGE_HEAD=AGE[PERNO==1])

ID AGE PERNO AGE_HEAD
1  1  30     1       30
2  1  25     2       30
3  2  25     1       25
4  2  24     2       25
5  2   3     3       25
6  3  65     1       65
7  3  55     2       65

data.table解决方案:

library(data.table)
DT<-data.table(df)

DT[, AGE_HEAD := AGE[PERNO==1], by="ID"]
   ID AGE PERNO AGE_HEAD
1:  1  30     1       30
2:  1  25     2       30
3:  2  25     1       25
4:  2  24     2       25
5:  2   3     3       25
6:  3  65     1       65
7:  3  55     2       65

答案 1 :(得分:0)

据我了解,当AGE为1时,您想要的是为ID的每个级别选择PERNO的值,在此示例中它是相同的(偶然)只取AGE的最大值,如果我没错,这段代码就是后来的。

> transform(df, AGE_HEAD=rep(df$AGE[df$PERNO==1], rle(df$ID)$lengths))
  ID AGE PERNO AGE_HEAD
1  1  30     1       30
2  1  25     2       30
3  2  25     1       25
4  2  24     2       25
5  2   3     2       25
6  3  65     1       65
7  3  55     2       65