全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
5122 4
2016-11-08
本文的内容由rmarkdown生成,若需要r源代码,可以加楼主头像微信,大家相互学习,一起进步!!!


#加载dplyr包
library(dplyr)

##
## Attaching package: 'dplyr'

## The following objects aremasked from 'package:stats':
##
##    filter, lag

## The following objects aremasked from 'package:base':
##
##    intersect, setdiff, setequal, union

library(openxlsx)
library(knitr)
library(rmarkdown)

#设置默认路径
default.path <- c("D:\\R\\RCourse\\dplyr")
setwd(default.path)

#利用openxlsx包读取财务衍生数据
finance.data <- read.xlsx(xlsxFile = "财务衍生数据.xlsx",sheet = 1)

class(finance.data)

#使用dplyr包的之前,建议最好对读入的数据进行tbl_df转换,经过tbl_df转换后的数据,会有多个属性
finance.data <- tbl_df(finance.data)

class(finance.data)

## [1] "data.frame"
## [1] "tbl_df"     "tbl"        "data.frame"

简介

dplyrR语言中使用频次非常高的一个包,主要用来对数据进行预处理,灵活、强大,是Rer必须掌握的一个包。

常用函数

•            arrange

•            select

•            tbl_df

•            between

•            bind

•            case_when

•            count

•            desc

•            do

•            filter

•            first

•            groups

•            group_by

•            if_else

•            inner_join

•            join

•            left_join

•            last

•            matches

•            mutate

•            mutate_if

•            n

•            select

•            summarise

•            tbl

•            transmute

select

select函数可以选取指定的对象中的列数据

#下面我们通过使用select函数来选取finance.data中的几列数据

#选取一列
finance.data.select <- head(select(finance.data,证券代码))
#选取两列及以上
finance.data.select <- head(select(finance.data,证券代码,roe_ma))

当然,除此之外,还可以使用start_withend_withcontainsmatches函数来配合select函数一起使用

#配合start_with函数,可以选取任意字符开头的列
finance.data.select <- head(select(finance.data, starts_with("o")))

#配合end_with函数,可以选取任意字符结尾的列
finance.data.select <- head(select(finance.data, starts_with("g")))

#配合contains函数,可以选取包含任意字符的列
finance.data.select <- head(select(finance.data, contains("o")))

#配合matches函数,可以选取符合正则规则的列
finance.data.select <- head(select(finance.data, matches("g")))

filter

filter是一个过滤函数,通过这个函数可以筛选出符合条件的数据。

#首先选取finance.data中的两列
finance.data.select <- select(finance.data,证券代码,roe_ma)
#使用filter函数保留roe_ma列中大于15以上的行
finance.data.select <- filter(finance.data.select,
                             finance.data.select$roe_ma>15)
#使用filter函数保留roe_ma列中大于15且小于20的行
finance.data.select <- filter(finance.data.select,
                             finance.data.select$roe_ma>15 &
                                finance.data.select$roe_ma < 20)

between

between主要筛选介于两个值之间的数据。

#判断roe_ma的值介于17和18之间
finance.data.select$roe_ma_if <- between(finance.data.select$roe_ma,17,18)
#筛选roe_ma_if中为TRUE的行
filter(finance.data.select,finance.data.select$roe_ma_if==TRUE)

## # A tibble: 15 × 3
##     证券代码 roe_ma roe_ma_if
##       <chr>  <dbl>     <lgl>
## 1 000418.SZ  17.27      TRUE
## 2 000848.SZ  17.03      TRUE
## 3 000895.SZ  17.38      TRUE
## 4 000921.SZ  17.20      TRUE
## 5 002071.SZ  17.76      TRUE
## 6 002108.SZ  17.09      TRUE
## 7 002270.SZ  17.91      TRUE
## 8 002400.SZ  17.25      TRUE
## 9 002595.SZ  17.89      TRUE
## 10 002701.SZ 17.48      TRUE
## 11 300136.SZ 17.36      TRUE
## 12 600201.SH 17.12      TRUE
## 13 600887.SH 17.04      TRUE
## 14 601012.SH 17.04      TRUE
## 15 603589.SH 17.36      TRUE

case_when

case_when在对数据重编码情况下经常用到。

#首先选取finance.data中的两列
finance.data.select <- select(finance.data,证券代码,roe_ma)
finance.data.select <- tbl_df(finance.data.select)
#使用case_when进行重编码
finance.data.select$roe_ma_if <- case_when(
finance.data.select$roe_ma < 10 ~ "one",
finance.data.select$roe_ma < 20 ~ "two",
finance.data.select$roe_ma >= 20 ~ "three"
)
head(finance.data.select,10)

## # A tibble: 10 × 3
##     证券代码 roe_ma roe_ma_if
##       <chr>  <dbl>     <chr>
## 1 000001.SZ   9.91       one
## 2 000002.SZ  11.80       two
## 3 000008.SZ   2.33       one
## 4 000010.SZ   2.81       one
## 5 000012.SZ   7.02       one
## 6 000018.SZ  54.25     three
## 7 000021.SZ   2.69       one
## 8 000026.SZ   3.10       one
## 9 000028.SZ   9.82       one
## 10 000034.SZ   2.82      one

if_else

if_else类似excel中的if函数,类似R基础包中的ifelse函数,唯一不同的是,if_else中包含一个对缺失值处理的参数。

#首先选取finance.data中的两列
finance.data.select <- select(finance.data,证券代码,roe_ma)
finance.data.select <- tbl_df(finance.data.select)
#使用if_else
finance.data.select$roe_ma_if <- if_else(finance.data.select$roe_ma>10,
                                         "big",
                                         "small",
                                         "missing")
head(finance.data.select$roe_ma_if,20)

##  [1] "small"   "big"     "small"   "small"   "small"   "big"     "small"  
##  [8]"small"  "small"   "small"   "small"   "small"   "missing" "small"  
## [15] "small"   "missing" "small"   "big"     "small"   "small"

arrange

arrange函数使用desc函数来对数据排序。

arrange(finance.data, roe_ma)

## # A tibble: 1,970 × 17
##     证券代码 证券简称 一级行业分类   二级行业分类  日期 roe_ma
##       <chr>    <chr>        <chr>          <chr> <dbl>  <dbl>
## 1 000711.SZ 京蓝科技       房地产 房地产开发管理 42667  0.00
## 2 002608.SZ *ST 舜船         机械       运输设备 42667   0.00
## 3 300116.SZ 坚瑞消防         机械   其他专用设备 42667   0.00
## 4 600242.SH 中昌海运     交通运输       航运港口 42667   0.00
## 5 600306.SH *ST 商城     商贸零售           零售 42667   0.00
## 6 600508.SH 上海能源         煤炭   煤炭开采洗选 42667   0.01
## 7 600222.SH 太龙药业         医药       中药生产 42667   0.02
## 8 000426.SZ 兴业矿业     有色金属       稀有金属 42667  0.03
## 9 000785.SZ 武汉中商     商贸零售           零售 42667   0.05
## 10 000778.SZ 新兴铸管         钢铁           普钢 42667   0.06
## # ... with 1,960 more rows, and 11 morevariables: roe_avg <chr>,
## #  eps_ma <chr>, eps_avg <chr>, opps_avg <chr>, npr_avg<chr>,
## #  drdAdj_1y <dbl>, drdAdj_1y_ig <dbl>, naps <chr>,naps_ig <chr>,
## #  ocfps <chr>, ocfps_ig <chr>

mutate

finance.data.select <- select(finance.data,roe_ma)
mutate(finance.data.select,roe_ma_add=roe_ma/15)

## # A tibble: 1,970 × 2
##    roe_ma roe_ma_add
##    <dbl>      <dbl>
## 1   9.91  0.6606667
## 2  11.80  0.7866667
## 3   2.33  0.1553333
## 4   2.81  0.1873333
## 5   7.02  0.4680000
## 6  54.25  3.6166667
## 7   2.69  0.1793333
## 8   3.10  0.2066667
## 9   9.82  0.6546667
## 10  2.82  0.1880000
## # ... with 1,960 more rows

summarise

finance.data.select <- select(finance.data,roe_ma)
summarise(finance.data.select,sum(roe_ma,na.rm = TRUE))

## # A tibble: 1 × 1
##  `sum(roe_ma, na.rm = TRUE)`
##                         <dbl>
## 1                    11990.85



二维码

扫码加我 拉你入群

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

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

全部回复
2016-11-9 06:56:38
跪求excel源文件和r代码,530996082@qq.com,谢谢楼主
二维码

扫码加我 拉你入群

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

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

2016-11-9 12:00:27
ipony 发表于 2016-11-9 06:56
跪求excel源文件和r代码,530996082@qq.com,谢谢楼主
可以加我QQ 501071775  一起进步
二维码

扫码加我 拉你入群

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

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

2016-11-10 09:33:15
很好
二维码

扫码加我 拉你入群

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

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

2018-10-19 11:11:24
在加载dplyr包的时候,你是怎么知道需要加载library(openxlsx)
library(knitr)
library(rmarkdown)这些包的呢,好像并没有提示依赖了这些包。


二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群