我在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

有人能教我怎么解决这个问题吗?

谢谢!

推荐答案

按‘name’分组,使用complete得到缺少的‘Year’,fill‘Year’,‘age’中的NA个元素与以前的非NA值,从组索引的序列中减go ‘age’

library(dplyr)
library(tidyr)
problem_data %>% 
    group_by(name) %>% 
    complete(year = full_seq(year, period = 1)) %>% 
    fill(year, age, .direction = "downup") %>%
    mutate(real_age= age - (row_number() - 1)) %>%
   ungroup

R相关问答推荐

x[[1]]中的错误:脚注越界

更改默认系列1以更改名称

RStudio中相关数据的分组箱形图

计算具有奇数日期的运行金额

如何在Chart_Series()中更改轴值的 colored颜色 ?

如何从像glm这样的模型中提取系数表的相关性?

无法正确设置动态创建的Quarto标注的格式

根据1个变量绘制 colored颜色 发散的 map ,由另一个变量绘制饱和度,ggplot2不工作

用两种 colored颜色 填充方框图

函数可以跨多个列搜索多个字符串并创建二进制输出变量

在R中,我如何使用滑动窗口计算位置,然后进行过滤?

有没有办法定制Plot(allEffects())面板标题?

根据r中另一个文本列中给定的范围对各列求和

如何阻止围堵地理密度图?

如何在使用Alpha时让geom_curve在箭头中显示恒定透明度

SHILINY中DT列的条件着色

访问数据帧中未定义的列时出现R错误

删除r中每个因素级别的最后2行

如何根据列名和行名求和矩阵的值?

迭代通过数据帧创建直方图