楼主: anliukobe
1373 8

[实际应用] [求助][for循环特别慢]将属于某省份的全部个股每日收益率加权平均得到省份每日收益 [推广有奖]

  • 0关注
  • 0粉丝

初中生

85%

还不是VIP/贵宾

-

威望
0
论坛币
9 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
251 点
帖子
11
精华
0
在线时间
19 小时
注册时间
2011-2-23
最后登录
2022-4-15

楼主
anliukobe 发表于 2020-9-23 08:33:59 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
如题,我有每支个股每日的收益率,要按省份加权平均得到省级每日收益率,数据结构如下图,收益率是return,权重是sizelag
QQ截图20200923082401.png

以下是我写的代码 QQ截图20200923084603.png
  1. for(i in fulldata_date){
  2.     for(j in fulldata_province){
  3.     value<-fulldata_return[fulldata_date==i & fulldata_province==j]   #第i日第j省份return作为值
  4.     weight<-fulldata_sizelag[fulldata_date==i & fulldata_province==j]   #第i日第j省份sizelag作为权重
  5.     return[i,j]<-weighted.mean(value,weight)    #把加权平均值赋给新建的return矩阵,
  6.     turnover[i,j]<-sum(fulldata_travol[fulldata_date==i & fulldata_province==j])/sum(fulldata_share[fulldata_date==i & fulldata_province==j])   #计算省级每日换手率,交易量之和/流通股数之和
  7.     size[i,j]<-sum(fulldata_size[fulldata_date==i & fulldata_province==j])    #计算省级每日总市值
  8.     }
  9. }
复制代码


只是很简单的for循环,但是运行特别慢,总样本量是147天*3372支个股=约49万条数据,跑了整整一夜,7个小时都没有出结果
提取了一个样本量为1122条数据的小样本,跑了3分钟才出结果

所以问题究竟出在哪里呢?感谢帮助
二维码

扫码加我 拉你入群

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

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

关键词:for循环 日收益率 For 收益率 province

沙发
anliukobe 发表于 2020-9-23 08:40:39
代码中的fulldata 以及用来装载结果的return size turnover都是数据框    后三个行名已改为日期

藤椅
drunkfish69 发表于 2020-9-23 19:41:11
感觉程序不是作者想表达的意思
看看这个是不是你要的return

  1. library(tidyverse)

  2. return.province <- fulldata %>%
  3.   group_by(date, province) %>%
  4.   weighted.mean(return, sizelag/sum(sizelag))
复制代码


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

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

板凳
anliukobe 发表于 2020-9-24 16:21:37
drunkfish69 发表于 2020-9-23 19:41
感觉程序不是作者想表达的意思
看看这个是不是你要的return
谢谢帮助
我之前发的程序包含求加权平均收益率、求换手率和求总市值三个功能。。

我把您给的代码运行之后提示
Error in weighted.mean.default(., return, sizelag/sum(sizelag)) :
  'x' and 'w' must have the same length

这是不是因为程序把前面传入的整个fulldata当成了x,把return当成了权重?
请问这个该如何修改呢

报纸
drunkfish69 发表于 2020-9-24 16:43:26
我把您给的代码运行之后提示
Error in weighted.mean.default(., return, sizelag/sum(sizelag)) :
  'x' and 'w' must have the same length
return或sizelag有没有空值,譬如说股票停牌了(不是很懂股票),或者把样本数据发我看看

地板
drunkfish69 发表于 2020-9-24 17:28:37
  1. library(tidyverse)

  2. return.province <- fulldata %>%
  3.   group_by(date, province) %>%
  4.   summarise(
  5.     wt.rt = weighted.mean(return, sizelag/sum(sizelag, na.rm = TRUE),
  6.                           na.rm = TRUE),
  7.     turnover = sum(travol) / sum(share),
  8.     t.size = sum(size)
  9.   )  
复制代码


直接管道到weighted.mean()是有问题,试试这样可以吗?

7
anliukobe 发表于 2020-9-25 09:50:30
drunkfish69 发表于 2020-9-24 17:28
直接管道到weighted.mean()是有问题,试试这样可以吗?
可以了可以了!非常感谢

8
drunkfish69 发表于 2020-9-25 10:31:02
可以了可以了!非常感谢
问下速度怎么样?

9
anliukobe 发表于 2020-9-25 13:16:43
drunkfish69 发表于 2020-9-25 10:31
问下速度怎么样?
速度很快   50万条数据   三个功能全部实现总共也就一两秒钟时间

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-8 04:32