-8

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

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 one 的年龄

4

2 回答 2

2

Plyr 解决方案:

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

或者

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
于 2013-09-27T20:50:40.080 回答
0

据我了解,您想要的是AGE为每个级别选择IDwhen的PERNO值 1 在本例中与仅取 的最大值相同(偶然)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
于 2013-09-27T21:01:24.893 回答