id<-rep(1:20, each=16)
index<-rep(1:16, times=20)
day<-rep(rep(1:4, each=4), times=20)
mock_df<-data.frame(id, index, day)
这是一个纵向数据,参与者每天提供几天的报告几天。 ID是指每个参与者的日常参与者,以及索引。在模拟数据中,每个“参与者”每天提供4个报告,总计4天。 (但是,实际数据是不平衡的,参与者每天的报告天数不同,报告数量不同。)
我需要一个新的变量“最后”,指示每个参与者每天的最后测量场合。 所以,我想要的是这是:
id index day last
1 1 1 0
1 2 1 0
1 3 1 0
1 4 1 1
1 5 2 0
1 6 2 0
1 7 2 0
1 8 2 1
1 9 3 0
...
我尝试了
mock_df <- mock_df |>
group_by(id) |>
mutate(last=day[which.max(day)]) |>
ungroup()
但我认为这只是为所有行创建了一个带有值10的变量,因为在实际数据参与者中报告了10天。
像这样的东西可能对您很感兴趣:
library(dplyr)
mock_df |>
mutate(last = as.integer(max(index) == index), .by = c(id, day))