根据 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))
我有一个数据集,其中包含主题 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))