-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 1の年齢がかなりあります

4

2 に答える 2

2

プライアソリューション:

 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

私が理解している限り、必要なのはwhenAGEの各レベルのの値を選択することです 1 この例では (偶然) の最大値だけを取得するのと同じです。私が間違っていなければ、このコードは後は何ですか。IDPERNOAGE

> 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 に答える