R语言基础之第一部分 5种数据对象类型

作者: 多美丽 | 来源:发表于2019-08-25 22:56 被阅读0次

    北京时间:2019年8月25日 15:27 天气:晴朗 作者:多美丽

    前记:

    • 这两天学习英语学到怀疑人生,愣是被学英语的焦虑给搞到睡不着,所以下床学了点R给压压惊。以后当个走路睡觉吃饭都在thinking of 英语的洁妮吧。不然雅思怎么7分噢。
    • 今天边学习R写这个文章,在用R做过那么多次分析建模之后,发现自己是一枚R基础小白。所以赶紧在慕课拾掇起来看了课程,现在就把学到的记录以此巩固吧。

    正文:

    • 说实话,我是现在才发现打基础是很重要的,在建模堆里摸爬滚打了这么多次,每次在遇到些小问题的时候,就暴露了自己基本功不扎实,对矩阵数组列表都不够熟悉,使用其他函数其实对数据的格式类型要求挺多的,就比如我连基本的数据分析排序 分类就不知道怎么用,每次还得求助SAS,这就很.....了。So now, let's move to our learning of R Basics.

    部分:5种数据对象类型

    1.1 向量(vector)

    x1 = vector("character",length = 10)     #创建空向量,向量里的值为字符型
    x2 = 1:4    #创建连续型数值向量时很方便
    x3 = c(2,3,5,6)   #创建指定的数值向量很方便
    x4 = c(TRUE,10,"a")   #向量内容杂七杂八时,默认强制转换为字符型
    names(x2)= c("a","b","c","d")   #给向量命名,向量也要拥有姓名啊哈哈哈哈哈我之前就从来没给过她名分
    

    1.2 矩阵(matrix)
    向量+维度属性(nrow ncol)

    x1 = matrix(nrow = 3, ncol = 2)   #创建3行2列的空矩阵
    x2 = matrix(1:6, nrow = 3, ncol = 2)   #创建了内容是1到6的矩阵 需要说明的是,数字按列排
    dim(x2)   #查看矩阵x2的维度
    attributes(x2)   #查看矩阵x2的属性,在不了解x2里有啥属性的时候,用这个就很让人清楚
    
    y1 = 1:6
    dim(y1) = c(3,2)   #把向量y1创建成矩阵了 和上面x2一样的效果
    y2 = matrix(11:16, nrow = 3, ncol = 2)
    rbind(y1,y2)   #按行合并
    cbind(y1,y2)   #按列合并
    #rbind cbind只要要合并的矩阵两者行数或列数不一致,就无法合并。所以要保证二者行列相等哦
    

    1.3 数组(array)
    与矩阵相似,但维度可大于2(说白了元素都是数 维度随便设)

    x1 = array(1:24, dim = c(4,6))   #4行6列的数组
    x2 = array(1:24, dim = c(2,3,4))   #2行3列,但有4个这样的
    , , 1
    
         [,1] [,2] [,3]
    [1,]    1    3    5
    [2,]    2    4    6
    
    , , 2
    
         [,1] [,2] [,3]
    [1,]    7    9   11
    [2,]    8   10   12
    
    , , 3
    
         [,1] [,2] [,3]
    [1,]   13   15   17
    [2,]   14   16   18
    
    , , 4
    
         [,1] [,2] [,3]
    [1,]   19   21   23
    [2,]   20   22   24
    
    

    1.4 列表(list)
    可以包含不同类型

    l1 = list("a", 2, 10L, 3+4i, TRUE)   #容得下任何类型,每个属性内容互补干涉,可同一类型,可不同类型
    l2 = list(a = 1, b = 1, c = 3)  #列表里的3个属性名称依次是a b c
    l3 = list(c(1,2,3), c(4,5,6,7))
    x = matrix(1:6,2,3)
    dimnames(x) = list(c("a","b"), c("c","d","e"))   #用list函数成功给矩阵命名
    

    1.5 因子(factor)
    整数向量+标签

    x1 = factor(c("female", "male", "female", "male", "female"))    #把向量设为因子型
    x2 = factor(c("female", "male", "female", "male", "female"), levels = c("male","female"))    #levels的设置告知male为基线水平,谁在前谁就是基线,在建模时候经常用到
    table(x1)
    x1
    female   male 
         3      2 
    
    unclass(x1)        #去掉因子属性,看属性内容
    [1] 1 2 1 2 1
    attr(,"levels")
    [1] "female" "male" 
    

    1.6 缺失值(missing value)
    NA:各种类型的缺失值
    NAN:数值型的缺失值
    NAN 属于 NA
    is.na 和 is.nan 判断向量中是否有缺失值

    x = c(1, NA, 2, NA, 3)
    is.na(x)
    [1] FALSE  TRUE FALSE  TRUE FALSE
    is.nan(x)
    [1] FALSE FALSE FALSE FALSE FALSE
    

    1.7 数据框(data.frame)
    存储表格数据,视为各元素长度相同的列表

    df1 = data.frame(id = c(1,2,3,4), name = c("a","b","c","d"), order = c(TRUE, TRUE, FALSE, TRUE))
      id name order
    1  1    a  TRUE
    2  2    b  TRUE
    3  3    c FALSE
    4  4    d  TRUE
    
    df2 = list(id = c(1,2,3,4), name = c("a","b","c","d"), order = c(TRUE, TRUE, FALSE, TRUE))
    $id
    [1] 1 2 3 4
    
    $name
    [1] "a" "b" "c" "d"
    
    $order
    [1]  TRUE  TRUE FALSE  TRUE
    
    df3 = data.frame(id = c(1,2,3,4), score = c("81", "60", "15", "100"))
    data.matrix(df3)  # **若数据框全为数值,则可用该函数转换为矩阵**
    

    1.8 日期与时间(date, time)
    日期

    x1 = date()   #获取系统日期和数据
    class(x1)
    [1] "character"
    
    x2 = Sys.Date()   #获取系统日期
    class(x2)
    [1] "Date"
    
    x3 = as.Date("2015-01-01")   #格式必须包含年月日三者且用-或者/分隔
    quarters(x3)   #获取日期所在季度
    months(x3)   #获取日期所在月份
    weekdays(x3)   #获取日期所在星期
    julian(x3)   #距离1970-01-01的天数
    x4 = as.Date("2019-05-01") 
    x4 - x3   #和SAS一样,日期是可以相减的,因为日期代表的是距离1970-01-01的天数
    Time difference of 1581 days    #结果显示为文字型
    as.numeric(x4 - x3)     #强制得到数值结果
    [1] 1581
    

    时间
    POSIXct 整数 常用于存入数据框
    POSIXIt 列表 还包括年月日等信息

    x = Sys.time()
    [1] "2019-08-25 18:18:28 CST"
    class(x)
    [1] "POSIXct" "POSIXt" 
    
    p = as.POSIXlt(x)
    [1] "2019-08-25 18:18:28 CST"
    class(p)
    [1] "POSIXlt" "POSIXt"      #Xct转换成了Xlt
    unclass(p)       #unclass 以后出现了很多p的信息,因为转换成了POSIXlt,是列表,包括很多信息
    $sec
    [1] 18.25399
    
    $min
    [1] 24
    
    $hour
    [1] 18
    
    $mday
    [1] 25
    
    $mon
    [1] 7
    
    $year
    [1] 119
    
    $wday
    [1] 0
    
    $yday
    [1] 236
    
    $isdst
    [1] 0
    
    $zone
    [1] "CST"
    
    $gmtoff
    [1] 28800
    
    attr(,"tzone")
    [1] ""    "CST" "CDT"
    names(unclass(p))     #去掉属性 内容留下
     [1] "sec"    "min"    "hour"   "mday"   "mon"    "year"   "wday"   "yday"   "isdst" 
    [10] "zone"   "gmtoff"
    
    y = "Jan 1,2015 01:01"
    strptime(y, "%B %d,%Y %H:%M")     #此处耍宝失败 若您知晓原因 请告知噢
    [1] NA      
    

    后续请参考:
    R语言基础之第部分 : 操纵数据取子集
    R语言基础之第部分:重要函数apply族函数的使用
    R语言基础之第部分 : 排序
    R语言基础之第部分 : 总结数据信息

    相关文章

      网友评论

        本文标题:R语言基础之第一部分 5种数据对象类型

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