根据 R 中的条件创建新的时间点列

Create a new Timepoint column based on a condition in R

我有一个数据集,其中包含主题 ID 和每个主题的不同时间点。我在几个过滤器上过滤了数据,并希望根据受试者的现有时间点创建一个新的时间点。新点应该是主题的第一次访问和当前访问之间的差异。我如何在 R 中执行此操作?

具有预期结果的示例数据

ID Original_timepoint New_timepoint
一个 1 1
一个 6 6
一个 18 18
一个 36 36
B 24 1
B 48 24

我们可以通过采用 diff 并附加按 'ID' 分组的 1 来标准化。从输入数据来看,一些 ID 已经标准化。因此,我们可以使用 if/else 条件来跳过这些 ID

library(dplyr)
df1 %>%
    group_by(ID) %>%
    mutate(New_timepoint = if(first(Original_timepoint)  > 1) 
          c(1, diff(Original_timepoint)) else Original_timepoint) %>%
    ungroup

-输出

# A tibble: 6 x 3
  ID    Original_timepoint New_timepoint
  <chr>              <int>         <dbl>
1 A                      1             1
2 A                      6             6
3 A                     18            18
4 A                     36            36
5 B                     24             1
6 B                     48            24

数据

df1 <- structure(list(ID = c("A", "A", "A", "A", "B", "B"), 
Original_timepoint = c(1L, 
6L, 18L, 36L, 24L, 48L), New_timepoint = c(1L, 6L, 18L, 36L, 
1L, 24L)), class = "data.frame", row.names = c(NA, -6L))