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

news2024/9/22 23:34:00
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  # 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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/61215.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用 Learner Lab - 在 Lambda 建立 Pillow 层,进行 S3 的图片镜相操作

使用 Learner Lab - 在 Lambda 建立 Pillow 层&#xff0c;进行 S3 的图片镜相操作 AWS Academy Learner Lab 是提供一个帐号让学生可以自行使用 AWS 的服务&#xff0c;让学生可以在 100 USD的金额下&#xff0c;自行练习所要使用的 AWS 服务&#xff0c;如何进入 Learner La…

[论文阅读] 颜色迁移-Automated Colour Grading

[论文阅读] 颜色迁移-Automated Colour Grading 文章: Automated colour grading using colour distribution transfer, [paper], [matlab代码], [python代码] 1-算法原理 本文算法分为2个大步骤, 首先使用IDT(Iterative Distribution Transfer)方法得到初步的结果, 这个结果…

优雅的springboot参数校验(二)

7. 集合校验 有这样一种场景&#xff0c;前端请求后端接口时&#xff0c;需要传递的是一个数组&#xff0c;数组的元素是一个对象&#xff0c;并且希望后台收到参数后可以对数组集合中的元素元素对象的属性进行校验&#xff0c;如果后台直接以List的来接收参数&#xff0c;约束…

[附源码]计算机毕业设计基于springboot的云网盘设计

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

linux网络编程之tcp

相关函数 int socket(int domain,int type,int protocol);参数&#xff1a; domain&#xff1a; AF_INET AF_INET6 AF_UNIX,AF_LOCAL AF_NETLINK AF_PACKET type&#xff1a; SOCK_STREAM: 流式套接字&#xff0c;唯一对应于TCP SOCK_DGRAM:数据报套接字&#xff0c;唯一对应着…

【第七章 MySQL体系结构、存储引擎、InnoDB、MyISAM、Memory、存储引擎特点及选择】

第七章 MySQL体系结构、存储引擎、InnoDB、MyISAM、Memory、存储引擎特点及选择 1.MySQL体系结构&#xff1a; ①连接层&#xff1a; 最上层是一些客户端和链接服务&#xff0c;包含本地sock 通信和大多数基于客户端/服务端工具实现的类似于TCP/IP的通信。主要完成一些类似于连…

[Power Query] 日期和时间处理

Power Query查询编辑器为日期和时间数据提供了强大而快捷的处理方式 例1: 从日期中提取年、月份、日、季度、周、天等信息 数据源 步骤1:将数据源导入到Power BI Desktop&#xff0c;单击【转换数据】选项&#xff0c;进入Power Query查询编辑器界面 步骤2:选中"日期&qu…

【概念】数据仓库和数仓建模

数据仓库 数仓主要特征 面向主题&#xff1a;每个需求和表都属于一个主题&#xff0c;可以用主题来对数仓的表分门别类集成性&#xff1a;将异构数据源&#xff0c;比如MySQL和服务器埋点日志&#xff0c;统一转换成结构化的hive表数据存储到ODS层非易失性&#xff1a;对历史…

Flink系列文档-(YY12)-窗口计算

1 窗口基本概念 1.1 概述 窗口&#xff0c;就是把无界的数据流&#xff0c;依据一定规则划分成一段一段的有界数据流来计算&#xff1b; 既然划分成有界数据段&#xff0c;通常都是为了"聚合"&#xff1b; Keyedwindow重要特性&#xff1a;任何一个窗口&#xff0…

游戏开发36课 cocoscreator scrollview优化

在cocoscreator内&#xff0c;ScrollView控件封装的挺完美的了&#xff0c;不过对于一些对性能要求比较高的场景&#xff0c;会存在问题&#xff0c;以top100排行榜排行榜举例子 1、应用卡顿甚至崩溃 按照官方用例使用ScrollView&#xff0c;插入100个玩家的item&#xff0c;理…

离线安装harbor容器镜像仓库(harbor-v2.3.5)

记录&#xff1a;354 场景&#xff1a;在CentOS 7.9操作系统上&#xff0c;离线部署harbor容器镜像仓库集群&#xff0c;使用Redis为外部缓存、使用PostgreSQL为外部数据库、使用Ceph为共享存储、使用nginx为harbor的负载均衡、使用Keepalived为集群高可用、使用docker-ce操作…

【专业术语】(计算机 / 深度学习与目标检测 / 轨道交通)

专业术语-计算机 / 深度学习与目标检测 / 轨道交通一、 计算机1 IDE2 API3 CUDA Driver API3.1 cuInit - 驱动初始化3.2 关于context&#xff0c;有两种&#xff1a;3.3 CUcontext4 RuntimeAPI5 Memory5.1 关于内存&#xff0c;有两大类&#xff1a;5.1.1 CPU内存&#xff0c;称…

[附源码]Python计算机毕业设计Django考试系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

FISCO BCOS(二十五)———多机部署

一、基础环境搭建 1、查看当前是否安装了ssh-server服务 dpkg -l | grep ssh2、安装ssh-server服务 sudo apt-get install openssh-server3、修改配置文件"/etc/ssh/sshd_config" 4、重启openssh-server root@FISCOBCOS01:~# sudo /etc/init.d/ssh restart5、查看…

高数 |【2020数一真题】部分错题及经典题自用思路整理

T1:积分限与被积函数都等价为无穷小 T2:不连续一定不可导 T3:可微的定义 T4:收敛半径 T6:空间直线与向量 法一:

WINDOWS7-11磁盘分区教程

首先&#xff0c;打开计算机管理界面 以windows11为例&#xff0c;在任务栏搜索框内&#xff0c;输入“计算机管理界面” 点击打开。 然后选择存储-》磁盘管理 到这里之后&#xff0c;我们需要选中一个磁盘&#xff0c;压缩卷分出来一部分空间。为新分区做准备。 以E盘为例&a…

MapStruct与lombok加载顺序问题与annotationProcessorPaths的关系?

MapStruct是什么&#xff1f; MapStruct is a code generator that greatly simplifies the implementation of mappings between Java bean types based on a convention over configuration approach.——https://mapstruct.org/ 从官方定义来看&#xff0c;MapStruct类似于我…

C语言Socket编程,实现两个程序间的通信

文章目录server和client通信流程图实现两个程序间的通信1.服务端server2.客户端client3.怎么运行呢&#xff1f;4.重写代码已剪辑自: https://www.cnblogs.com/fisherss/p/12085123.html server和client通信流程图 在mooc上找到的,使用Socket客户端client和服务端server通信的…

17-JavaSE基础巩固练习:Math类API两道数学算法水题

两道算法水题&#xff08;一&#xff09; 一、判断质数 判断一个数是否为一个质数。 1、以前的写法 package com.app.demo26_math_api;public class Test1 {public static void main(String[] args) {/*判断n(任意整数)是否为一个质数&#xff1a;以前的写法:是用n对2~n之间…

JavaWeb Filter 过滤器

参考&#xff1a;JavaWeb过滤器(Filter)详解 1、简介 顾名思义就是对事物进行过滤的&#xff0c;在Web中的过滤器&#xff0c;当然就是对请求进行过滤&#xff0c;我们使用过滤器&#xff0c;就可以对请求进行拦截&#xff0c;然后做相应的处理&#xff0c;实现许多特殊功能。…