楼主: shieryuemo
4815 3

[程序分享] R数据处理必须掌握的包,初学者R数据处理常用包dplyr中文实例详解教程 [推广有奖]

  • 1关注
  • 9粉丝

博士生

81%

还不是VIP/贵宾

-

威望
0
论坛币
9232 个
通用积分
2.1815
学术水平
22 点
热心指数
31 点
信用等级
14 点
经验
1583 点
帖子
49
精华
0
在线时间
631 小时
注册时间
2015-2-2
最后登录
2024-2-15

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
本文的内容由rmarkdown生成,若需要r源代码,可以加楼主头像微信,大家相互学习,一起进步!!!


#加载dplyr包library(dplyr)## ## Attaching package: 'dplyr'## The following objects are masked from 'package:stats':## ##     filter, lag## The following objects are masked from 'package:base':## ##     intersect, setdiff, setequal, unionlibrary(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")))
filterfilter是一个过滤函数,通过这个函数可以筛选出符合条件的数据。
#首先选取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)
betweenbetween主要筛选介于两个值之间的数据。
#判断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_whencase_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_elseif_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_elsefinance.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"
arrangearrange函数使用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 more variables: 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>
mutatefinance.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
summarisefinance.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

二维码

扫码加我 拉你入群

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

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

关键词:dplyr 数据处理 初学者 following intersect following library objects package 源代码

沙发
Quant0160601 发表于 2016-11-8 16:38:36 |只看作者 |坛友微信交流群
支持楼主
!!!!!!!!!!!!

使用道具

藤椅
johnmy 发表于 2016-11-9 03:50:48 来自手机 |只看作者 |坛友微信交流群
这个包很好

使用道具

板凳
cwjonline 发表于 2018-8-18 10:25:46 |只看作者 |坛友微信交流群
可有专门书介绍 “dplyr”?

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-19 17:51