#加载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"
dplyr是R语言中使用频次非常高的一个包,主要用来对数据进行预处理,灵活、强大,是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
selectselect函数可以选取指定的对象中的列数据
#下面我们通过使用select函数来选取finance.data中的几列数据
#选取一列
finance.data.select <- head(select(finance.data,证券代码))
#选取两列及以上
finance.data.select <- head(select(finance.data,证券代码,roe_ma))
当然,除此之外,还可以使用start_with,end_with,contains,matches函数来配合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是一个过滤函数,通过这个函数可以筛选出符合条件的数据。
#首先选取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主要筛选介于两个值之间的数据。
#判断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在对数据重编码情况下经常用到。
#首先选取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类似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函数使用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>
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
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


雷达卡





京公网安备 11010802022788号







