我在R中有一个数据集,如下所示:
name = c("john", "john", "john", "alex", "alex", "peter", "peter", "peter", "peter")
year = c(2010, 2011, 2015, 2014, 2016, 2010, 2011, 2012, 2013)
age = c(21, 21, 21, 55, 55, 61, 61, 61, 61)
problem_data = data.frame(name, year, age)
name year age
1 john 2010 21
2 john 2011 21
3 john 2015 21
4 alex 2014 55
5 alex 2016 55
6 peter 2010 61
7 peter 2011 61
8 peter 2012 61
9 peter 2013 61
在这个数据集中,每个人在最后记录的年份的年龄被错误地插入到每一行.例如,在现实中:
- 彼得在2013年61岁
- 彼得在2012年时60岁
- 2011年,彼得59岁
- 彼得在2010年时58岁
有时会错过几年--结果是:
- 亚历克斯2016年55岁
- 亚历克斯2014年53岁
我正在努力研究一种在R中可以处理这样的任务的方法.我一直在try 将"累积组差异"和"最大行数条件"结合起来--但我不确定如何将这些概念结合在一起才能实现这一点:
# https://stackoverflow.com/questions/39237345/subtract-value-in-previous-row-for-each-section-of-a-data-frame-that-corresponds
library(dplyr)
new_data = problem_data %>%
group_by(name) %>%
mutate(real_age= age - lag(age, default = age[1]))
但这种做法让每个人的年龄都变成了0!
# A tibble: 9 x 4
# Groups: name [3]
name year age real_age
<chr> <dbl> <dbl> <dbl>
1 john 2010 21 0
2 john 2011 21 0
3 john 2015 21 0
4 alex 2014 55 0
5 alex 2016 55 0
6 peter 2010 61 0
7 peter 2011 61 0
8 peter 2012 61 0
9 peter 2013 61 0
有人能教我怎么解决这个问题吗?
谢谢!