R练习50题 - 第二期

2020-08-12 10:29:19 浏览数 (1)

题预览

今天我们继续做题,由于整个题目按照从易到难排列,所以今天的题目并不会很难。先看一下预览:

  • 每天每个交易所上涨、下跌的股票各有多少?
  • 沪深300成分股中,每天上涨、下跌的股票各有多少?
  • 每天每个行业各有多少只股票?
  • 每天涨幅超过5%、跌幅超过5%的股票各有多少?

我们已经把所有50题的答案都上传到了我们的Github主页,但是校对及代码解析只写到了第十题。等不及想先睹为快的同学,请猛戳这里:

github.com/Ravin515/r-data-practice

另外,感谢frankzhangyd同学在Github上提的建议!

习题 3

每天每个交易所上涨、下跌的股票各有多少?

分析:

这题和Ex-2非常类似,唯一的不同就是分组变量多了一个:对于每个交易日,我们不仅需要根据涨跌updown分组,还要根据交易所分组。也即,每个交易日都会产生四个subgroup:SH-DOWN, SH-UP, SZ-DOWN, SZ-UP.

由于股票代码symbol的最后两个字符表示交易所(例如,600123.SH表示上海交易所,股票代码600123),我们在建立分组变量时需要使用str_sub函数截取最后两个字符。

代码及解析:

  • 在keyby语句中,我们创建了三个分组变量,首先是日期date,其次是交易所exchange(只取SH/SZ两个值),最后是涨跌updown。注意这三个变量的先后顺序非常重要,不能颠倒。
  • 字符串截取函数str_sub来自stringr包。str_sub(symbol, start = -2, end = -1)的意思是截取symbol最后两个字符(注意start/end取了负值)。

练习 4

沪深300成分股中,每天上涨、下跌的股票各有多少?

分析:

本题仍旧是Ex-2的拓展,只不过要求我们进行行选择操作。在data.table的dt[i,j,by]语法中,i代表行选择操作。

为了选出沪深300成分股,我们需要用到index_w300这个变量。index_w300表示一个股票在沪深300指数中的权重,如果大于零,说明它是成分股;如果为零,说明不是成分股。

代码及解析:

  • 为了选出沪深300成分股,我们使用了index_w300 > 0这个语句。index_w300是一个数值变量,与零进行比较运算后会生成一列与原向量等长的布尔向量(例如 c(True, False False, True...))。data.table只会选择为True的那些元素。
  • 在data.table的dt[i, j, by]语法中,先执行行选择操作i, 再执行分组操作by, 最后执行列操作j。因此上述代码的执行顺序为:先index_w300 > 0,然后keyby, 最后生成num.

练习 5

每天每个行业各有多少只股票?

分析:

仍旧是Ex-2的拓展,而且更为简单。我们只需要按照date和industry进行分组,然后统计每个subgroup的个数即可。

代码及解析:

  • 我们生成一个新的变量stk_num用来表示每天每个行业的股票数。

习题 7

每天涨幅超过5%、跌幅超过5%的股票各有多少?

分析:

这一题的关键思路还是Ex-2中的分组。首先,我们自然要对日期分组,然后按照updown进行分组。updown是用户新建的字符变量,只取up5% 和down5% 两个值,一个表示涨幅超过5%,一个表示跌幅超过5%。最后,我们统计每个subgroup的个数

代码及解析:

  • 为了方便计算,我们首先在原数据集中新增一个变量ret,表示股票的日收益率。':='(ret = (close - pre_close)/pre_close)即为新建收益率的语句,其定义为今日收盘价减去昨日收盘价,再除以昨日收盘价
  • ret > 0.05 | ret < -0.05用来删选出收益率超过5%或小于-5%的观测。注意以上运算的结果是一个取值为True或False的向量,data.table最终会挑选出为True的那些行。
  • 我们仍旧使用ifelse函数生成updown这个变量。ifelse(ret > 0.05, "up5% ", "down5% ")的意思是,如果条件(ret > 0.05)成立,那么取值up5% ,否则取值down5% .

期预告

在下一期,我们会继续带来剩余题目的解答~

大猫的R语言课堂

我是大猫,一个高中读文科但却在代码、数学的路上狂奔不止的Finance Ph. D Candidate。

我是村长,一个玩了9年指弹吉他,却被代码深深吸引的博士候选人。

大猫的微信号是:

iRoss2007

村长的B站主页是:http://space.bilibili.com/40771572

大猫的R语言课堂关注R语言、数据挖掘以及经济金融学。

我们与大家分享我们的知识和节操,我相信独乐乐不如众乐乐。

0 人点赞