楼主: azhezeus
1240 4

[问答] 自编程序如何循环 [推广有奖]

  • 0关注
  • 0粉丝

学前班

初中生

85%

还不是VIP/贵宾

-

威望
0
论坛币
589 个
通用积分
0.0000
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
188 点
帖子
8
精华
0
在线时间
31 小时
注册时间
2009-9-13
最后登录
2025-11-29

楼主
azhezeus 发表于 2016-8-4 14:59:37 |AI写论文
30论坛币
两个表 capital 和stocks  先根据两表的股票代码是相通的的  将两表合成一个总表,命名为zongbiao然后创建一个自定义功能m1<-function(x,n)               x为所操作的列    n为分的段  并分段求平均   具体操作要求就附件
                        怎么一次性把一整张表都做出来 不用一列列的改
求大神搭救

stocks<- read.csv(file = '季度涨跌幅.csv',na.strings = 0)

capital<- read.csv(file = '每股净资产BPS.csv',na.strings = 0)

zongbiao<- merge(stocks,capital,by='证券代码')

f<- quantile(zongbiao$BPS2003一季.,probs=seq(0,1,length.out = 6), na.rm = T)

m1<-  function(x,n) {

  l<- length(x)

  step<- floor(l/n)

  k<- vector(length = n)

  for(i in 0:(n-1)){

    low<- i*step

    up<- (i+1)*step

    k[i+1]<- mean(x[low:up],na.rm = T)

  }

    return(k)

}

x<- zongbiao[zongbiao$BPS2003一季.,]$季度涨跌幅2003一季

m1(x,5)



最佳答案

cheetahfly 查看完整内容

你的原始数据还没有清洗过,另外将NA变为0的行为将会让数据的排序不具唯一性,我改为舍弃BPS的NA值。 整个过程感觉很别扭,数据不“干净”是很重要的原因,比如stock的数据缺乏2003年之前的,有些observation没有股票代码等等,你要好好清洗一下。
关键词:编程序 Capital capita Stocks Stock 程序 如何

沙发
cheetahfly 在职认证  发表于 2016-8-4 14:59:38
你的原始数据还没有清洗过,另外将NA变为0的行为将会让数据的排序不具唯一性,我改为舍弃BPS的NA值。
  1. library(dplyr)
  2. library(tidyr)
  3. # 以下两个操作是沿用你的,实际上read.csv并不支持na.strings参数。
  4. stock <- read.csv(file = "季度涨跌幅.csv", na.strings = 0)
  5. capital <- read.csv(file = "每股净资产BPS.csv", na.strings = 0)
  6. # 原来的变量名太过繁琐,统一改为以下的:
  7. names(stock)[-1:-2] <- sort(paste(expand.grid(2003:2015, 1:4)[,1], expand.grid(2003:2015, 1:4)[,2], sep = "_"))
  8. names(capital)[-1:-2] <- sort(paste(expand.grid(2000:2015, 1:4)[,1], expand.grid(2000:2015, 1:4)[,2], sep = "_"))
  9. # 变形为长数据
  10. capital_long <- gather(capital, "season", "BPS_value", 3:66)
  11. stock_long <- gather(stock, "season", "ret_value", 3:54)
  12. # 合并数据
  13. zong_long <- left_join(capital_long, stock_long)
  14. # 舍弃所有BPS缺失的数据
  15. zong_long_nona <- zong_long[!is.na(zong_long$BPS_value),]
  16. # 增加BPS按5个quantile值分类的信息列
  17. zong_long_nona <- zong_long_nona %>% group_by(season) %>%
  18.   mutate(BPS_quantile = cut(BPS_value, breaks = 5,
  19.   labels = c("0-20%", "20%-40%", "40%-60%", "60%-80%", "80%-100%")))
  20. # 计算结果
  21. out <- zong_long_nona %>% group_by(season, BPS_quantile) %>%
  22. summarise(ret = mean(ret_value, na.rm = TRUE))
  23. # 结果变形为要求的模式
  24. spread(out, BPS_quantile, ret)
复制代码
整个过程感觉很别扭,数据不“干净”是很重要的原因,比如stock的数据缺乏2003年之前的,有些observation没有股票代码等等,你要好好清洗一下。


已有 1 人评分经验 论坛币 收起 理由
李会超 + 60 + 10 热心帮助其他会员

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

藤椅
azhezeus 发表于 2016-8-4 15:40:35
数据在这  附件

每股净资产BPS.xlsx
下载链接: https://bbs.pinggu.org/a-2079980.html

142.41 KB

从03年开始

季度涨跌幅.xlsx

129.47 KB

板凳
azhezeus 发表于 2016-8-4 15:44:06
操作要求

目的.txt

368 Bytes

报纸
azhezeus 发表于 2016-8-8 13:01:39
cheetahfly 发表于 2016-8-4 14:59
你的原始数据还没有清洗过,另外将NA变为0的行为将会让数据的排序不具唯一性,我改为舍弃BPS的NA值。
整个 ...
感谢这么详细的回答 虽然还没做出来 但我相信这回答肯定是对的  我会一直试下去的  数据确实没怎么清洗    R新手

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-9 09:11