R 多变量数据预处理_R语言-数据预处理(一)(用于生成html文件R代码)

---
title: "数据预处理"
author: "天良"
date: "`r Sys.Date()`"
output: 
  html_document:
    toc: true
    toc_float:
      collapsed: false
      smooth_scroll: false
    number_sections: true
    fig_width: 15
    fig_height: 12
    fig_caption: true
    df_print: paged
classoption: "hyperref,"
---
```{r echo=F, include=F} 
knitr::opts_chunk$set(
  message = F,
  warning = F,
  cache = T,
  fig.show = "hold"
) 
options(knitr.kable.NA = ' - ')
library(tidyverse)  # 使用管道操作符、readr包中的函数
library(lubridate)
library(forcats)
library(knitr)  
library(kableExtra)  # 绘制带格式表格
library(DMwR2)  # 用于加载该项目数据集algae及其中的一些数据处理函数
library(mice)  # 用于缺失值填充
library(CORElearn)  # 用于变量选择
library(sampling)  # 用于分层抽样
library(DBI)  # 用于连接数据库
library(RMySQL)  # 用于连接数据库MySQL
library(Boruta)  # 用于特征选择
```

# 整理数据-数据结构变换

使用tidyr包中的gather(宽变长)和spread(长变宽)实现数据结构变换。

## 宽格式数据转换为长格式

### 准备数据集

```{r}
anthoming <- gcookbook::anthoming
# 将数据集以表格化展示
kable(anthoming, format = "html", align = "c") %>%
  kable_styling(position = "center")
```

49474cd318e5336d42d2b21942eb32d5.png

### 将宽格式数据变为长格式数据

```{r}
anthoming %>% 
  gather(key = "condition", value = "count", expt:ctrl) %>%
  kable(format = "html", align = "c") %>%
  kable_styling(position = "center")
```

60495541595474eacb6e3ba4981244c7.png

## 长格式数据转换为宽格式

### 准备数据集

```{r}
plum <- gcookbook::plum
# 将数据集以表格化展示
kable(plum, format = "html", align = "c") %>%
  kable_styling(position = "center")
```

8ca0d08ccc41851914b9acbaded5d65e.png

### 将长格式数据转换为宽格式数据

```{r}
plum %>%
  spread(survival, count) %>%
  kable(format = "html", align = "c") %>%
  kable_styling(position = "center")
```

e6d2b6947049021739f0361b5cd5591f.png

# 处理日期

使用lubridate包中的相关函数处理日期数据,如ymd、as.period、interval。

## 将日期字符串转换为日期数据

```{r}
ymd(c("2018-10-10","181010","2018/10/10")) %>%
  kable(format = "html", align = "c", col.names = "") %>%
  kable_styling(position = "center")
```

340893078b903e79a2c02a559716e8f5.png

## 日期计算

### 计算两个日期之间相隔的年份

假如有一个人,出生日期为1987年1月1日,那么截止2018年8月1日,他`r year(as.period(interval(ymd("1987/1/1"), ymd("2018-8-1"))))`岁。

```{r}
# 计算截止2018年8月1日时他的年龄
year(as.period(interval(ymd("1987/1/1"), ymd("2018-8-1"))))
```

### 计算两个日期之间相隔的月份

假如有一个人,于2000年3月15日进公司,那么截止2018年8月1日,他在该公司的工龄为`r year(as.period(interval(ymd("2000/3/15"), ymd("2018-8-1"))))`年`r month(as.period(interval(ymd("2000/3/15"), ymd("2018-8-1"))))`个月,合计`r year(as.period(interval(ymd("2000/3/15"), ymd("2018-8-1")))) * 12 + month(as.period(interval(ymd("2000/3/15"), ymd("2018-8-1"))))`个月。

```{r}
# 计算工龄年
work_age_by_year_y <- year(as.period(interval(ymd("2000/3/15"), ymd("2018-8-1"))))
# 计算工龄余下的月
work_age_by_year_m <- month(as.period(interval(ymd("2000/3/15"), ymd("2018-8-1"))))
# 计算工龄合计月
work_age_by_month <- work_age_by_year_y * 12 + work_age_by_year_m
t <- tribble(
  ~工龄年, ~工龄月, ~工龄合计月,
  work_age_by_year_y, work_age_by_year_m, work_age_by_month
)
t %>%
  kable(format = "html", align = "c") %>%
  kable_styling(position = "center")
```

e329d2c5d977ab85b4f7a83799e0e36b.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值