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


    R语言

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



    一、示例

    在这里插入图片描述

    • 一组数据:上司对经理人的服从度的评价,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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    二、创建新变量

    • 创建新变量或对原变量进行替换
    • 方法:
    变量名 <- 表达式
    # 表达式可以包含多种运算符和函数
    
    • 1
    • 2
    • 算数运算符
    算数运算符功能
    +
    -
    *
    /
    ^或**求幂
    x%%y求余
    x%/%y整数除法(只取整数位),如5.5%/%2=2
    • 函数transform( )
      • 创建新变量的步骤
    • 语法
    变量名 <- transform(数据框名,变量名 = 表达式)
    
    • 1
    • 示例:展示三种创建新变量的方法
    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    三、变量的重编码

    • 定义:根据变量的现有值重新创建新的值
      • 例如:将误编码的值替换为正确值
      • 基于一个指标将值划分为几个区间
    • 判定:利用逻辑运算符来对数据进行判定,逻辑运算符的返回值为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)
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    四、变量的重命名

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

    4.1、交互式编辑器

    • 函数
    fix(数据框名)
    
    • 1

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

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

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

    4.2、函数编程

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

    五、缺失值

    • 缺失值(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)
    
    • 1
    • 2
    • 3
    • 4

    六、日期值

    • 概述:通过将日期值改编为日期变量后就可以对日期进行分析与绘图
    • 日期变量:日期值会以字符串的形式输入到R中,然后转化为以数值形式存储的日期变量
    • 函数as.Date()
    • 语法
    as.Date(x,"input_format")
    # x为字符串数据
    # input_format为日期格式参数
    
    • 1
    • 2
    • 3
    • 日期格式参数
    符号含义示例
    %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"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 函数扩展
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

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

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

    6.2、进阶函数介绍

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

    七、类型判断/转化

    • 查询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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    九、数据集的合并

    向数据框中添加行或列

    9.1、向数据框添加列

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

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

    • 函数cbind()

    • 语法

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

    9.2、向数据框添加行

    • 函数rbind()
    • 语法
    x <- merge(dateframe1,dateframe2,by = "变量名") 
    x <- merge(dateframe1,dateframe2,by = c("变量名1","变量名2"..))
    
    • 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    10.4、subset( )函数

    • 函数subset()
    • 功能:用于选择变量和观测subset
    • 语法
    subset(dateframe,condition,select = c())
    # dateframe为数据集
    # condition为筛选条件
    # select里面为保留的变量名
    
    • 1
    • 2
    • 3
    • 4
    • 示例
    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及其之间的列
    
    • 1
    • 2
    • 3

    10.5、随机抽样

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

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

    • R包sqldf
    • 通过该R包就可以在R中使用SQl语句对数据框等变量进行操作。
    • 示例
    install.packages("sqldf")
    library(sqldf)
    dateframe <- sqldf("select * from x",row.names = T)
    
    • 1
    • 2
    • 3
  • 相关阅读:
    无证书线性同态聚合签名方案研究
    创建老版本react-native项目,以0.59.10为例(0.60.0之前的版本)
    一篇博客带你学会MyBatis
    IIS 日志解析,增强 IIS 服务器安全性
    C语言 0 —— 信息在计算机中的表示
    【Linux】翻山越岭——进程地址空间
    Android WMS—— Surace管理 (二十)
    npm install:sill idealTree buildDeps
    Java继承的本质分析
    OpenWrt之feeds.conf.default详解
  • 原文地址:https://blog.csdn.net/qq_45794091/article/details/127595982