首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算条件累计和

计算条件累计和
EN

Stack Overflow用户
提问于 2019-01-21 09:06:25
回答 1查看 182关注 0票数 2

我有以下数据帧:

代码语言:javascript
复制
N=seq(1:18)
Pre=c(0.5, 0.4, 0.7, 0.9, 0.6, 0.3, 0.7, 0.8, 0.6, 0.5, 0.4, 0.7, 0.9, 0.6, 0.3, 0.7, 0.8, 0.6)
df1=data.frame(N, Pre)

E=c(3.1, 2.9, 4.4)
Category=c(22,35,36)
df2=data.frame(E, Category)

我想在df1中创建两个新列(cumsumcategory)

cumsum列中的值将不断累积,直到该值等于或小于df2$E的值,当该值大于该值时,cumsum将重新开始。在category列中,该值将是22、35或36,依此类推。

结果将是

这是一个简短的例子,我需要用一个非常大的数据帧来做这件事。

EN

回答 1

Stack Overflow用户

发布于 2019-01-21 09:25:55

要获得Category列,我们可以cut cumsumPre值,并将df2breaks定义为cumsum of E,将labels定义为相应的Category值。现在,我们可以使用这个Category值作为分组变量,并使用cumsum获取每个组中Pre值的ave

代码语言:javascript
复制
df1$Category <- cut(cumsum(df1$Pre), breaks = c(0, cumsum(df2$E)), 
                                    labels = df2$Category)

df1$Cumsum <- ave(df1$Pre, df1$Category, FUN = cumsum)


df1
#    N Pre Category Cumsum
#1   1 0.5       22    0.5
#2   2 0.4       22    0.9
#3   3 0.7       22    1.6
#4   4 0.9       22    2.5
#5   5 0.6       22    3.1
#6   6 0.3       35    0.3
#7   7 0.7       35    1.0
#8   8 0.8       35    1.8
#9   9 0.6       35    2.4
#10 10 0.5       35    2.9
#11 11 0.4       36    0.4
#12 12 0.7       36    1.1
#13 13 0.9       36    2.0
#14 14 0.6       36    2.6
#15 15 0.3       36    2.9
#16 16 0.7       36    3.6
#17 17 0.8       36    4.4
#18 18 0.6     <NA>    0.6
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54282404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档