如何通过特定 ID 撤消 R 中的累积值? 数据

问题描述

我有一个数据集,其中每一行都包含每年雌性后代的累积数量。有些人从一年到下一年死去。

 Year    ID Sex      AccumulatedFecundity
     1  2411 female   29
     1   583 female   30
     1   469 female   147
     2  2290 female   161
     2   583 female   169
     2   788 female   27

我想撤消此累积并获取原始值。在我的例子中,女性 583 的第二次出现应该得到 139 (169-30) 的原始值。

解决方法

我们可以按“ID”和“性别”分组diff

library(dplyr)
df1 %>%
   group_by(ID,Sex) %>%
   mutate(old = c(first(AccumulatedFecundity),diff(AccumulatedFecundity))) %>%
   ungroup

-输出

# A tibble: 6 x 5
#   Year    ID Sex    AccumulatedFecundity   old
#  <int> <int> <chr>                 <int> <int>
#1     1  2411 female                   29    29
#2     1   583 female                   30    30
#3     1   469 female                  147   147
#4     2  2290 female                  161   161
#5     2   583 female                  169   139
#6     2   788 female                   27    27

数据

df1 <- structure(list(Year = c(1L,1L,2L,2L),ID = c(2411L,583L,469L,2290L,788L),Sex = c("female","female","female"),AccumulatedFecundity = c(29L,30L,147L,161L,169L,27L)),class = "data.frame",row.names = c(NA,-6L))

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...