我有一个监测数据集,它记录了21天周期内不同受试者的体重(大多数情况下)-然而,有时周期缩短了(例如20天)或扩增(例如28天)。参见示例:
set.seed(20)
df <- data.frame(subject1 = runif(n=1:90, min = 1, max = 100),
subject2 = runif(n=1:90, min = 1, max = 100),
subject3 = runif(n=1:90, min = 1, max = 100),
day = c(rep(1:21, 2), 1:28, 1:20))
df
我想创建一个带有“batch ID”的列,每次循环开始时,它的数量都会增加,得到如下内容:
set.seed(20)
df <- data.frame(subject1 = runif(n=1:90, min = 1, max = 100),
subject2 = runif(n=1:90, min = 1, max = 100),
subject3 = runif(n=1:90, min = 1, max = 100),
day = c(rep(1:21, 2), 1:28, 1:20),
ID = c(rep("batch 1", 21), rep("batch 2", 21), rep("batch 3", 28), rep("batch 4", 20)))
df
我不知道从何说起。数据已经收集了很多年,df非常长,这就是为什么我需要一个自动化的方法来做这件事。
我通常使用dplyr,但欢迎所有语言的解决方案。
2条答案
按热度按时间1l5u6lss1#
这是一种开始一个新的群体。我们可以用
cumsum(day==1)
来实现。每一天的时间为1,将启动一个新组:nhhxz33t2#
如果一个新组的日值小于它的前一个组,则开始新组。这甚至适用于大小不等的组。然后,您可以应用行程长度编码:
由reprex package(v2.0.1)于2023-05-13创建