如何在我的数据框中添加一个新列,该列将考虑一些标准,例如:
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的年龄答案 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