相关疑难解决方法(0)

是否存在与data.table :: rleid等效的dplyr?

data.tablerleid为游程编码提供了一个很好的便利功能:

library(data.table)
DT = data.table(grp=rep(c("A", "B", "C", "A", "B"), c(2, 2, 3, 1, 2)), value=1:10)
rleid(DT$grp)
# [1] 1 1 2 2 3 3 3 4 5 5
Run Code Online (Sandbox Code Playgroud)

我可以在以下基础R上模仿这个:

df <- data.frame(DT)
rep(seq_along(rle(df$grp)$values), times = rle(df$grp)$lengths)
# [1] 1 1 2 2 3 3 3 4 5 5
Run Code Online (Sandbox Code Playgroud)

有没有人知道dplyr等效(?)或创建rleid行为的"最佳"方法dplyr是执行以下操作

library(dplyr)

my_rleid = rep(seq_along(rle(df$grp)$values), times = rle(df$grp)$lengths)

df %>%
  mutate(rleid = my_rleid)
Run Code Online (Sandbox Code Playgroud)

r run-length-encoding dplyr data.table

15
推荐指数
5
解决办法
2499
查看次数

到达最大值的累积总和,然后在下一行从零开始重复

我觉得这是一个相当容易的问题,但对于我的生活,我似乎无法找到答案.我有一个相当标准的数据框,我想要做的是将一列值相加,直到它们达到某个值(精确值或大于它),此时它将1放入一个新列(标记为保持)并在0处重新开始求和.

我有一列分钟,分钟,保留列和累积总和列之间的差异(我使用的示例比实际的完整数据集更清晰)

 minutes     difference     keep     difference_sum
 1052991158       0          0            0
 1052991338      180         0            180
 1052991518      180         0            360
 1052991698      180         0            540
 1052991878      180         0            720
 1052992058      180         0            900
 1052992238      180         0            1080
 1052992418      180         0            1260
 1052992598      180         0            1440
 1052992778      180         0            1620
 1052992958      180         0            1800
Run Code Online (Sandbox Code Playgroud)

差值和列用代码计算

caribou.sub$difference_sum<-cumsum(difference)
Run Code Online (Sandbox Code Playgroud)

我想要做的是运行上面的代码,条件是,当求和值达到1470或任何大于它的数字时,它将1放入保留列,然后重新开始求和,并继续在整个数据集中运行.

在此先感谢,如果您需要更多信息,请告诉我们.

艾登

loops if-statement r cumsum

12
推荐指数
2
解决办法
4974
查看次数