当前位置: 首页 > news >正文

R语言学习笔记——入门篇:第四章-基本数据管理

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  # R语言

R语言学习笔记——入门篇:第四章-基本数据管理


文章目录

  • 一、示例
  • 二、创建新变量
  • 三、变量的重编码
  • 四、变量的重命名
    • 4.1、交互式编辑器
    • 4.2、函数编程
  • 五、缺失值
    • 5.1、重编码某些值为缺失值
    • 5.2、在分析中排除缺失值
  • 六、日期值
    • 6.1、将日期值转换回字符型变量
    • 6.2、进阶函数介绍
  • 七、类型判断/转化
  • 八、数据排序
  • 九、数据集的合并
    • 9.1、向数据框添加列
    • 9.2、向数据框添加行
  • 十、数据集取子集
    • 10.1、保留变量
    • 10.2、删除变量
    • 10.3、筛选变量
    • 10.4、subset( )函数
    • 10.5、随机抽样
  • 十一、使用sql语句操作数据框


一、示例

在这里插入图片描述

  • 一组数据:上司对经理人的服从度的评价,q1-q5表示了"非常不同意",“不同意”,“一般”,“同意”,“非常同意”。
  • 其中存在着缺失的数据(经理人4,q4-q5),无效的数据(经理人5,年龄99),为了更好的处理数据还需要对数据重编排等,这些都需要我们对数据进行基本的管理。数据管理前的第一步是创建数据集(详见第二章)
  • 第一步——创建数据集
Sys.setenv(LANGUAGE = "en")
options(stringsAsFactors = F)
rm(list = ls())
setwd("C:/Users/16748/Desktop/R语言学习/R")

manager <- c(1,2,3,4,5)
manager <- c(1,2,3,4,5)
date <- c("10/24/08","10/28/08","10/1/08","10/12/08","5/1/09")
country <- c("US","US","UK","UK","UK")
age <- c(32,45,25,39,99)
gender <- c("M","F","F","M","F")
q1 <- c(5,3,3,3,2)
q2 <- c(4,5,5,3,2)
q3 <- c(5,2,5,4,1)
q4 <- c(5,5,5,NA,2)
q5 <- c(5,5,2,NA,1)

leadership <- data.frame(manager,date,country,
                         gender,age,q1,q2,q3,q4,q5)

二、创建新变量

  • 创建新变量或对原变量进行替换
  • 方法:
变量名 <- 表达式
# 表达式可以包含多种运算符和函数
  • 算数运算符
算数运算符功能
+
-
*
/
^或**求幂
x%%y求余
x%/%y整数除法(只取整数位),如5.5%/%2=2
  • 函数transform( )
    • 创建新变量的步骤
  • 语法
变量名 <- transform(数据框名,变量名 = 表达式)
  • 示例:展示三种创建新变量的方法
x <- data.frame(x1 = c(1,2,3,4),
                x2 = c(4,3,2,1))
# 方法一
x$sum <- x$x1 + x$x2
# 方法二
attach(x)
x$sum <- x1 + x2
detach(x)
# 方法三
x <- transform(x,sum = x1 + x2)

三、变量的重编码

  • 定义:根据变量的现有值重新创建新的值
    • 例如:将误编码的值替换为正确值
    • 基于一个指标将值划分为几个区间
  • 判定:利用逻辑运算符来对数据进行判定,逻辑运算符的返回值为TRUE或FALSE
  • 逻辑运算符
逻辑运算符功能
<小于
<=小于等于
>大于
>=大于等于
==等于
!=不等于
!x非x
x I yx或y
x & yx和y
isTRUE(x)测试x是否为TRUE
  • 示例
# 将99岁的年龄重编码为缺失值
leadership$age[leadership$age ==99] <- NA

# variable[condition] <- expression将仅在condition的值为TRUE时执行
# 希望将年龄值按照不同年龄段分类
leadership <- within(leadership,{
  age[age == 99] <- NA
  agecat <- NA
  agecat[age > 75] <- "Elder"
  agecat[age >= 35 & age <= 75] <- "Middle Aged"
  agecat[age < 35 ] <- "Young"
  agecat <- factor(agecat,levels = c("Elder","Middle Aged","Young"),ordered = T)
})

四、变量的重命名

有两种方式进行变量重命名

4.1、交互式编辑器

  • 函数
fix(数据框名)

此函数会调用出一个交互式编辑器,然后直接单击变量名就可以重命名。

  • 示例
    在这里插入图片描述

  • 结果
    在这里插入图片描述

4.2、函数编程

  • 函数
names( )
rename( )# 属于plyr包
  • 语法
names(数据框名)[需要修改变量的列(数值)] <- "修改后的名字"
rename(dataframe,c(oldname1="newname1",oldname2="newname2",...))
  • 示例
names(leadership)[2] <- "testDate"
leadership <- rename(leadership,c(manager = "managerID",date = "testDate"))
  • 结果
    在这里插入图片描述

五、缺失值

  • 缺失值(NA,Not Available,不可用):项目中不完整的数据,字符型与数值型中都用NA表示。
  • 检测缺失值is.na()函数 ,返回逻辑值
  • 注意点
    • 缺失值不可用于比较(即使是与缺失值自身比较)
    • 无限大不可能的值 != 缺失值(在R中)
      • 例如:正无穷(负无穷) 标记为 (-)Inf
      • 不可能的值(如sin(Inf)) 标记为 NAN(not a number)
      • 利用is.infinite()函数is.nan()函数 来判断无限大与不可能的值。

5.1、重编码某些值为缺失值

三、变量的重编码 演示一般

5.2、在分析中排除缺失值

  • 由于含有缺失值的函数计算结果也是缺失值,因此在数据分析之前需要删除缺失值。
    • 多数函数中含有na.rm=TRUE的参数选项,可以移除缺失值并将剩余值进行计算.
    • na.omit()函数,将含有缺失值的那一行删除(项目中含有少量缺失值时使用)
    • 精细操作会在后续章节探讨
  • 示例
x <- c(1,2,NA,4)
y <- sum(x,na.rm = T)

newdata <- na.omit(leadership)

六、日期值

  • 概述:通过将日期值改编为日期变量后就可以对日期进行分析与绘图
  • 日期变量:日期值会以字符串的形式输入到R中,然后转化为以数值形式存储的日期变量
  • 函数as.Date()
  • 语法
as.Date(x,"input_format")
# x为字符串数据
# input_format为日期格式参数
  • 日期格式参数
符号含义示例
%d天数day(数字)01-31
%a星期名(缩写)Mon-Sun
%A星期名(全称)Monday-Sunday
% m月份(数字)01-12
% b月份(缩写)Jan-Dec
% B月份(全称)January-December
%y年份(2位数)22
%Y年份(4位数)2022
  • 默认输入格式:yyyy-mm-dd
    • 通过设定日期格式参数来转化输入格式
  • 示例
> date1 <- as.Date("1956-10-12")
> date1
[1] "1956-10-12"
> Dates <- c("01/05/1965","02/05/2000")
> myformat <- "%m/%d/%Y"
> dates <- as.Date(Dates,myformat)
> dates
[1] "1965-01-05" "2000-02-05"
  • 函数扩展
Sys.Date()
# 返回当天的日期
date()
# 返回当前的具体时间
format(TimeData,input_format)
# 将输入的TimeData日期变量,按照input_format日期格式输出
difftime(TimeData1,TimeData2,units = "")
# 计算时间间隔(星期,天,时,分,秒),可以存在负数

# 示例
> Sys.Date()
[1] "2022-12-03"
> # 返回当天的日期
> date()
[1] "Sat Dec  3 17:51:32 2022"
> # 计算时间间隔(星期,天,时,分,秒)
> format(as.Date("1956-10-12"),"%A")
[1] "星期五"
> difftime(as.Date("1956-10-12"),as.Date("2022-12-3"),units = "weeks")
Time difference of -3451.143 weeks

6.1、将日期值转换回字符型变量

  • 函数as.character()
  • 转化后,即可使用一系列字符函数处理数据(如取子集,替换,连接等)

6.2、进阶函数介绍

# 了解字符型数据转为日期的更多细节
help(as.Date)
help(strftime)
# 查看日期与时间格式
help(ISOdatetime)
# 简化日期处理的函数,用于识别解析日期-时间数据,抽取日期-时间成分(如年份,月份等),对日期-时间进行算数运算
lubridate
# 进行复杂的日期运算包,处理多时区,历法操作,支持工作日假期等。
timeDate

七、类型判断/转化

  • 查询class( )mode( )typeof( )
  • 判断is.arrary(/list/character …) 输出TRUE或FALSE
  • 修改as.arrary(/list/character …)
函数类型
is.numeric() / as.numeric数值型
is.character()字符型
is.logical()逻辑型
is.vector()向量
is.matrix()矩阵
is.array()数组
is.data.frame()数据框
is.factor()因子
is.list()列表

八、数据排序

  • 函数order(排序变量)
    • 默认排序顺序:升序
    • 降序:在排序变量前加上负号“-”
  • 示例
# 对行排序,先按照女性到男性的顺序,同性别中按年龄降序排序。
> newdate <- leadership[order(leadership$gender,-leadership$age),]
> newdate
  managerID testDate country gender age q1 q2 q3 q4 q5
5         5   5/1/09      UK      F  99  2  2  1  2  1
2         2 10/28/08      US      F  45  3  5  2  5  5
3         3  10/1/08      UK      F  25  3  5  5  5  2
4         4 10/12/08      UK      M  39  3  3  4 NA NA
1         1 10/24/08      US      M  32  5  4  5  5  5

九、数据集的合并

向数据框中添加行或列

9.1、向数据框添加列

有两种函数可以实现该目的

  • 函数merge()
  • 语法
x <- merge(dateframe1,dateframe2,by = "变量名") 
x <- merge(dateframe1,dateframe2,by = c("变量名1","变量名2"..))
  • 对象:横向合并两个数据框(数据集),根据一个或多个变量进行联结。

  • 函数cbind()

  • 语法

x <- cbind(A,B)
  • 对象:横向合并两个数据框或矩阵,不需要索引变量,要求两个对象拥有相同的函数。
  • 预处理:如果行数不同就需要预处理下数据,使得行数相同。例如dateframe1中拥有dateframe2中没有的变量。
    • 方法一:删除dateframe1中多余变量
    • 方法二:在dateframe2中创建追加变量,并将值设为NA

9.2、向数据框添加行

  • 函数rbind()
  • 语法
x <- merge(dateframe1,dateframe2,by = "变量名") 
x <- merge(dateframe1,dateframe2,by = c("变量名1","变量名2"..))
  • 对象:纵向合并两个数据框或矩阵,不需要索引变量,要求两个对象拥有相同的函数。
  • 预处理:如果行数不同就需要预处理下数据,使得行数相同。例如dateframe1中拥有dateframe2中没有的变量。
    • 方法一:删除dateframe1中多余变量
    • 方法二:在dateframe2中创建追加变量,并将值设为NA

十、数据集取子集

10.1、保留变量

  • 提取原数据集中的变量赋给新的数据集
  • 操作:数据提取(详见第二章)
  • 示例
> newdata <- leadership[,c(6:10)]
> newdata
  q1 q2 q3 q4 q5
1  5  4  5  5  5
2  3  5  2  5  5
3  3  5  5  5  2
4  3  3  4 NA NA
5  2  2  1  2  1

10.2、删除变量

  • 删除原数据集中的变量后赋给新的数据集
  • 通过逻辑判为FALSE,变量前加负号“-”,数据赋为NULL(非NA)实现
  • 操作:数据删除(详见第二章)
  • 示例
> x <- names(leadership) %in% c("q3","q4")
> x
 [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE
> newdata <- leadership[!x]
> newdata
  managerID     date country gender age q1 q2 q5
1         1 10/24/08      US      M  32  5  4  5
2         2 10/28/08      US      F  45  3  5  5
3         3  10/1/08      UK      F  25  3  5  2
4         4 10/12/08      UK      M  39  3  3 NA
5         5   5/1/09      UK      F  99  2  2  1

10.3、筛选变量

  • 通过一系列逻辑运算符来筛选需要的数据集后赋给新的数据集
  • 操作:逻辑运算符
  • 示例
> newdata <- leadership[1:3,]
> newdata <- leadership[leadership$gender == "M" & leadership$age >30,]
> newdata
  managerID     date country gender age q1 q2 q3 q4 q5
1         1 10/24/08      US      M  32  5  4  5  5  5
4         4 10/12/08      UK      M  39  3  3  4 NA NA

10.4、subset( )函数

  • 函数subset()
  • 功能:用于选择变量和观测subset
  • 语法
subset(dateframe,condition,select = c())
# dateframe为数据集
# condition为筛选条件
# select里面为保留的变量名
  • 示例
x <- subset(leadership,age >=35 | age <=24 ,select = c(q1,q2,q3,q4))
x <- subset(leadership,gender =="M" | age > 24 ,select = gender:q4)
# 保留了变量gender到q4及其之间的列

10.5、随机抽样

  • 函数sample()
  • 功能:从数据集中(有/无放回的)抽取大小为n的一个随机样本
  • 语法
sample(x,n,replace = T/F)
# x为抽样的范围
# n为抽样的数量
# replace表示有(T)无(F)放回抽样
  • 示例
x <- leadership[sample(1:nrow(leadership),,replace = T),]

十一、使用sql语句操作数据框

  • R包sqldf
  • 通过该R包就可以在R中使用SQl语句对数据框等变量进行操作。
  • 示例
install.packages("sqldf")
library(sqldf)
dateframe <- sqldf("select * from x",row.names = T)

相关文章:

  • Linux——VIM编辑器(详细)
  • 【简单易操作】图漾TM460-E2深度网络相机在ROS-melodic环境下的配置过程
  • 全场景 MPP 数据库ERM StarRocks 源代码数据湖分析
  • 基于事件驱动的微服务教程
  • [附源码]Python计算机毕业设计SSM京东仓库管理系统(程序+LW)
  • 卡尔曼滤波之最优状态估计和最优状态估计算法
  • 盒子模型详解
  • 第五章Pandas数据载入与预处理
  • JeecgBoot搭建(低代码)
  • springboot中使用Spring Data Jpa
  • SpringSecurity(八)【会话管理】
  • 机器学习笔记之受限玻尔兹曼机(三)推断任务
  • 高可用组件,Keepalived详解
  • SpringCloud
  • MATLAB学习笔记(系统学习)
  • 【Redis】Redis安装步骤和特性以及支持的10种数据类型(Redis专栏启动)
  • Matlab:tftb-0.2时频工具箱安装小记
  • docker 安装 redis 6.0.8 cluster 实战 (3主3从) 安装篇
  • [Windows驱动开发] BlackBone介绍
  • hadoop完全分布式环境搭建详细版
  • java-net-php-python-springboot校园招聘系统计算机毕业设计程序
  • 火到爆的扩散模型(Diffusion Model)帮你具象化幻想世界
  • Nature子刊 | 空间转录组技术及其发展方向
  • 通关算法题之 ⌈字符串⌋
  • python中的import详解
  • 计算机毕业设计Java校园内推系统(系统+源码+mysql数据库+lw文档)
  • 偶数科技:基于OushuDB的新一代云原生湖仓一体为企业助力
  • 【论文笔记】DEEP FEATURE SELECTION-AND-FUSION FOR RGB-D SEMANTIC SEGMENTATION
  • JAMA Neurology:帕金森病跨疾病阶段的新兴神经成像生物标记物
  • LeetCode简单题之按身高排序
  • 湖南2021本科批(普通类历史类)第一次征集志愿投档分数线
  • 2022年甘肃高考482分能报什么大学 482分能上哪些院校
  • 2022年全国各大高校在山东招生计划及分数
  • 浙江有哪些师范大学,年浙江师范类大学分数线排名一览表
  • 武汉设计工程学院是几本
  • 2022感恩节放假吗 中国有哪些节日会放假
  • 12种新高考3+1+2选科组合分析 怎么选科好
  • 0基础艺考最容易过的专业有哪些 通过率最高的专业是什么
  • 体育高水平怎么报名
  • 浙江2022普通类第二段平行投档分数线是多少