我有一个数据集counts.df
数据框,其中包含一个县的保险公司数量以及该县的人口数量。我想添加一个专栏,给出居住在县里的累积人口,至少和保险公司一样多。
我可以先在counts.df
上排序number.of.insurers
然后应用cumsum
来完成此操作:
counts.df<-counts.df[with(counts.df,order(-number.of.insurers)),]
counts.df$cum.pop<-cumsum(counts.df$pop)
这段代码感觉很脆弱,因为排序步骤可能会丢失,我实际上是在改变数据帧并依赖它的cumsum
当前状态来工作,这感觉非常不合适。
我的问题是:是否有明确的方法告诉cumsum
在不将数据框作为单独步骤排序的情况下使用什么顺序?
答案 0 :(得分:2)
不。你需要排序。这是dplyr样式链可以使事情更清晰的情况:
counts.df %>%
arrange(-number.of.insurers) %>%
mutate(cumpop=cumsum(pop))
如果你真的想要,你可以编写自己的函数来进行排序和求和。但是没有内置的东西。
sortcumsum <- function(x, ordered_by=seq_along(x)) {
idx <- order(ordered_by)
cumsum(x[idx])[order(idx)]
}
并像
一样使用它counts.df$cum.pop <- sortcumsum(counts.df$pop, -counts.df$number.of.insurers)