楼主: themlbb
1472 4

[问答] 请问如何实现类似excel中sumifs的效果 [推广有奖]

  • 3关注
  • 2粉丝

博士生

90%

还不是VIP/贵宾

-

威望
0
论坛币
2807 个
通用积分
9.4068
学术水平
1 点
热心指数
2 点
信用等级
1 点
经验
4230 点
帖子
172
精华
0
在线时间
536 小时
注册时间
2010-2-27
最后登录
2023-3-20

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
假设数据集大概是这样的
rq                     id             key           sales
20190101        a                  c             100
20190102        b                  d             200

需要计算一个新的列,即相同id和key下,根据日期顺序累加起来的销量

原本打算用ddply来生成
  1. data<-data %>%  ddply(.(rq,id,key),function(x) sum(data[which(data$id==x$id & data$key==x$key & data$rq<=x$rq),'sales']))
复制代码



但是有16w条记录,5分钟都没算出结果来,结果不懂耗了多久才得出来(捂脸)

请教大神,这种问题应该有哪种更科学的方法!!


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:数据集

沙发
themlbb 发表于 2019-4-14 19:54:28 |只看作者 |坛友微信交流群
换了个操作起来似乎更麻烦的方法,但是结果是几乎秒出的,我觉得肯定有更快捷的方法(捂脸)

  1. data<-left_join(data,data,c('id','key'),suffix=c('','.1')) %>% subset(rq>=rq.1) %>% group_by(rq,id,key,sales) %>% summarise(s=sum(sales.1))
复制代码




已有 1 人评分论坛币 收起 理由
cheetahfly + 10 热心帮助其他会员

总评分: 论坛币 + 10   查看全部评分

使用道具

藤椅
万人往LVR 在职认证  发表于 2019-4-16 17:50:43 |只看作者 |坛友微信交流群
  1. library(tidyverse)
  2. data %>% group_by(id,key) %>% mutate(val = cumsum(sales))
复制代码

使用道具

板凳
themlbb 发表于 2019-4-16 22:00:45 |只看作者 |坛友微信交流群
万人往LVR 发表于 2019-4-16 17:50
感谢大神!!

使用道具

报纸
themlbb 发表于 2019-4-19 19:11:58 |只看作者 |坛友微信交流群
经大神启发,还有个更稳健而且也是几乎秒出的方法
  1. data %>% group_by(id,key) %>% mutate(val =sapply(rq,function(x) sum(sales[x>=rq])))
复制代码

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-25 17:57