美文网首页
R语言实战4:基本数据管理

R语言实战4:基本数据管理

作者: 冬之心 | 来源:发表于2019-05-17 17:52 被阅读0次

    title: "R数据实战4:基本数据管理"
    author: "wintryheart"
    date: "2019年5月17日"
    output:
    html_document:
    toc: TRUE


    knitr::opts_chunk$set(echo = TRUE)
    

    第4章 基本数据管理

    4.1 数据集

    manager <- c(1: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")
    gender <- c("M","F","M","F","M")
    age <- c(32,45,25,39,99)
    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)
    leadship <- data.frame(manager, date, country, gender, age, q1, q2, q3,q4,q5, stringsAsFactors = FALSE)
    leadship
    
    

    4.2 创建新变量

    算术表达式

    运算符 描述
    求幂 ^或者**
    求余 x%%y
    整除 x%/%y
    #第一种方式:利用attach()简化操作
    attach(leadship)
    leadship$sumq12 = q1+q2
    leadship$meanq12 = (q1+q2)/2
    detach(leadship)
    
    #第二方式:利用transform()函数
    leadship <- transform(leadship,
                          sumq123 = q1+q2+q3,
                          meanq123 = (q1+q2+q3)/3)
    
    leadship
    

    4.3 变量的重编码

    逻辑表达式

    运算符 描述
    != 不等于
    !x 非X
    x | y x或y
    x & y x和y
    isTRUE(x) x是否为TRUE
    # within()和with()的不同之处在于,within()允许修改数据框。  
    leadship$age[leadship$age == 99] <- NA  #将99岁的年龄值编码为缺失值。
    leadship <- within(leadship,{
                       agecat <- NA   #创建新变量,赋值为缺失值
                       agecat[age > 75] <- "Elder"    
                       agecat[age >= 55 & age <=75] <- "Middle Aged"
                       agecat[age <55] <-"Yong"})
    leadship  
    # 利用car包中的recode()函数,和doBy包中的recodevar()函数更为方便。
    

    4.4 变量重命名

    手工修改:fix()函数调出交互式操作框

    fix(leadship)

    笨办法: names()函数

    names(leadship)[2] <- "textDate"
    

    更好用的方法:plyr包中的rename()函数

    rename(dataframe, c(oldname1="newname1", oldname2="newname2", ... ))

    library(plyr)
    leadship <- rename(leadship, c(q1="item1", q2="item2",q3="item3",q4="item4",q5="item5"))
    leadship
    

    4.5 缺失值

    is.na()检测缺失值是否存在。

    is.na(leadship)
    
    • 类似缺失值的标记与检测
    标记 含义 检测 备注
    NA 缺失值 is.na()
    Inf 正无穷 is.infinite() 5/0返回Inf
    -Inf 负无穷 is.infinite()
    NaN 不可能的值 is.nan() sin(Inf)不是一个数
    • 在分析中排除缺失值
      • 很多数值函数都有na.rm=TRUE选项,可以在计算之移除缺失值,并用剩余值计算。
      • 通过函数na.omit()移除所有含有缺失值的观测。
    x <- c(1, 2, NA, 3)
    y <- sum(x)
    z <- sum(x, na.rm=TRUE)
    print(list(x=x, y=y, z=z))
    
    newdata <- na.omit(leadship)
    newdata
    

    4.6 日期值

    日期格式

    符号 含义 示例
    %d 数字表示的日期(0~31) 01-31
    %a 缩写的星期名 Mon
    %A 非缩写的星期名 Monday
    %m 数字表示的月份(01~12) 01
    %b 缩写的月份 Jan
    %B 非缩写的月份 January
    %y 两位数的年份 07
    %Y 四位数的年份 2007
    • 日期的默认输入格式为:yyyy-mm-dd
    • 按指定格式读取:as.Date(object, "myfomats")
    • 按指定格式输出:format(object, format="output_format")
    • 日期值可以执行算术运算。
    • 函数difftime()可以计算以星期、天、时、分和秒表示的时间间隔,默认为天。
    • 日期型转换成字符型:as.character()
    #默认输入格式
    mydates1 <- as.Date(c("2007-01-09", "2019-03-14"))
    
    #按指定格式读取
    strDates <- c("01/15/1965","05/12/1970")
    mydates2 <- as.Date(strDates, "%m/%D/%Y")
    
    #按指定的格式输出
    Sys.Date()
    date()
    today <- Sys.Date()
    format(today, format="%B %d日 %Y年")
    format(today, format="%A")
    
    #日期算术运算
    startdate <- as.Date("1979-10-22")
    enddate <- Sys.Date()
    days <- enddate-startdate
    days
    
    #计算时间间隔
    difftime(enddate, startdate)
    difftime(enddate, startdate, units="weeks")
    

    4.7 类型转换

    类型转换函数

    判断 转换
    is.numeric() as.numeric()
    is.character() as.character()
    is.vector() as.vector()
    is.matrix() as.matrix()
    is.data.frame() as.data.frame()
    is.factor() as.factor()
    is.logical() as.logical()

    4.8 数据排序

    • 使用order()函数对数据框进行排序。默认为升序。
    • 在排序变量前加一个负号,就变为降序。
    attach(leadship)
    
    newdata1 <- leadship[order(gender,age),]
    
    newdata2 <- leadship[order(gender, -age),]
    
    print(list(newdata1, newdata2))  #NA比数字大。
    
    detach(leadship)
    

    4.9 数据集合并

    合并方向 函数 说明
    添加列 merge() 通过一个或多个共有变量联结,by="共有变量"
    添加列 cbind() 没有共有变量
    添加行 rbind()

    4.10 数据集取子集

    4.10.1 保留变量

    myvars <- c("q1","q2","q3","q4","q5")
    或者
    myvars <- paste("q", 1:5, sep="")

    newdatas <- leadship[myvars]

    4.10.2 剔除变量

    使用逻辑判断

    # names(leadship)生成一个包含所有变量名的字符型向量。
    # %in%返回一个逻辑型向量,匹配c()中元素的值为TRUE,否则为FASLE。
    myvars <- names(leadship) %in% c("sumq12", "meanq12")
    # !myvars 反向逻辑判断。
    # sumq12和meanq12被剔除
    newdata <- leadship[!myvars]
    newdata
    
    # 通过设为未定义(NULL)来剔除变量
    newdata$sumq123 <- newdata$meanq123 <- NULL
    newdata
    
    

    4.10.3 选择观测

    • 方法1:利用行下标

    newdatas <- leadship[1:3, ]

    • 方法2:利用逻辑判断筛选

    attach(leadship)
    newdats <- leadship[gender == "M" & age>30]
    detach(leadship)

    4.10.4 subset()函数同时选择变量和观测

    newdata3 <- subset(leadship, age>30, select=c(q1,q2,q3))
    
    newdata4  <-  subset(leadship, age>30 & gender=="M", select=q1:q4)   #支持from:to冒号运算符
    
    print(list(newdata3, newdata4))
    

    4.10.5 随机抽样

    
    #第一个参数1:nrow(leadship)确定被抽样的总体
    #第二个参数3确定抽样规模
    #第三个参数replace=FALSE表示无放回抽样。
    mysample <- leadship[sample(1:nrow(leadship), 3, replace=FALSE)]
    
    mysample
    
    #更复杂的抽样工具参见sampling包和survey包。
    

    相关文章

      网友评论

          本文标题:R语言实战4:基本数据管理

          本文链接:https://www.haomeiwen.com/subject/hjaoaqtx.html