1

我有一个数据框,其中包含个人在被发现的那一年的重复记录。

>long<-data.frame(identity,year,age)
> long
   identity year  age
1         z 2000 10.0
2         z 2001  7.5
3         z 2001  7.5
4         y 2000 10.0
5         x 2003  9.0
6         x 2004 11.0
7         w 2003  9.0
8         v 2001  7.5
9         v 2002 11.0
10        v 2004 11.0

年龄是根据他们被俘的年份估计的

yr.est<-data.frame(yr,est.age)
> yr.est
    yr est.age
1 2000    10.0
2 2001     7.5
3 2002    11.0
4 2003     9.0
5 2004    11.0

当一个人第一次见到后,我如何给他们一个初始估计年龄 + 岁差的估计年龄(例如,个人 v 在 2001 年估计为 7.5,而他们在 2004 年的年龄应该是 10.5 而不是 11)

我的实际数据集是 15000 长,所以我无法手动完成

TIA

编辑。

OP 作为评论发布的预期输出。

long 
  identity year age 
1        z 2000 10.0 
2        z 2001 11.0 
3        z 2001 11.0 
4        y 2000 10.0 
5        x 2003 9.0 
6        x 2004 10.0 
7        w 2003 9.0 
8        v 2001 7.5 
9        v 2002 8.5 
10       v 2004 10.5
4

1 回答 1

1

此代码est.age通过将当前年份和第一年之间的差异添加到第一个年龄,按组计算identity

library(tidyverse)

long %>%
  group_by(identity) %>%
  mutate(est.age = first(age) + (year - first(year))) %>%
  select(identity, year, est.age)
## A tibble: 10 x 3
## Groups:   identity [5]
#   identity  year est.age
#   <fct>    <int>   <dbl>
# 1 z         2000    10  
# 2 z         2001    11  
# 3 z         2001    11  
# 4 y         2000    10  
# 5 x         2003     9  
# 6 x         2004    10  
# 7 w         2003     9  
# 8 v         2001     7.5
# 9 v         2002     8.5
#10 v         2004    10.5

数据。

long <- read.table(text = "
   identity year  age
1         z 2000 10.0
2         z 2001  7.5
3         z 2001  7.5
4         y 2000 10.0
5         x 2003  9.0
6         x 2004 11.0
7         w 2003  9.0
8         v 2001  7.5
9         v 2002 11.0
10        v 2004 11.0
", header = TRUE)
于 2019-12-14T15:38:02.880 回答