累积扩展一个类别,以包括R中所有以前的观察结果

累积扩展一个类别,以包括R中所有以前的观察结果,r,R,我有这个数据框: df = as.data.frame(structure(list(ID = c(1,2,1,2), value = c(10,12,14,16), category = c(1,1,2,2)))) 我想将其放入每个类别的累积数据框中,其中每一行插入到顺序类别中: desired_df = as.data.frame(structure(list(ID =

我有这个数据框:

df = as.data.frame(structure(list(ID = c(1,2,1,2),
                              value = c(10,12,14,16),
                              category = c(1,1,2,2))))
我想将其放入每个
类别的累积数据框中,其中每一行插入到顺序类别中:

desired_df = as.data.frame(structure(list(ID = c(1,2,1,2,1,2),
                              value = c(10,12,10,12,14,16),
                              category = c(1,1,2,2,2,2))))

通过
所需的
,我希望能够累积地绘制每个类别中观察值的分布(每个类别都是一个时间步长)。

我们可以循环通过“类别”的
唯一的
元素,获得序列,使用该序列对原始数据集进行子集,
转换
类别
列,和
rbind
列表
元素

do.call(rbind, lapply(unique(df$category), function(i) 
         transform(df[df$category %in% seq_len(i),], category = i)))
#   ID value category
#1  1    10        1
#2  2    12        1
#3  1    10        2
#4  2    12        2
#5  1    14        2
#6  2    16        2

我们可以循环遍历“category”的
unique
元素,获得序列,使用该序列子集原始数据集,
transform
category
列,以及
rbind
列表
元素

do.call(rbind, lapply(unique(df$category), function(i) 
         transform(df[df$category %in% seq_len(i),], category = i)))
#   ID value category
#1  1    10        1
#2  2    12        1
#3  1    10        2
#4  2    12        2
#5  1    14        2
#6  2    16        2

这很有效,谢谢,但我必须确保类别是数字的。@口渴ForkKnowledge如果它不是
数字的
,那么
匹配(df$category,unique(df$category))
将给出数字版本,它可以循环工作,谢谢,但我必须确保类别是数字的。@口渴ForkKnowledge如果它不是
数字的
,然后
match(df$category,unique(df$category))
将给出数字版本,可以循环使用