本系列是一个新的系列,在此系列中,我将和大家共同学习R语言。由于我对R语言的了解也甚少,所以本系列更多以一个学习者的视角来完成。

参考教材:《R语言实战》第二版(Robert I.Kabacoff),书中所提到的John Cook的优秀博文,关于代码规范的《来自Google的R语言编码风格指南》。

Part 1:基本数据类型

Unit 1:向量、矩阵与数组

向量:用于存储数值型、字符型或逻辑型数据的一维数组,使用c()创建。

  • 单个向量中的数据必须拥有相同的类型或模式(数值、字符或逻辑)。
  • 标量是只含一个元素的向量,R中不存在一般意义上的标量。
  • 向量的方括号中可以放置一个整数向量作为索引。
  • R语言中,向量的索引从1开始,负数索引不表示倒数,而表示补集。有关更多索引的知识点,参阅Five kinds of subscripts in R

矩阵:每个元素都拥有相同的模式的二维数组,可通过matrix()创建。

mymatrix <- matrix(vector, nrow, ncol, byrow, dimnames)
  • matrix()的第一个参数是vector,包含了矩阵的元素。
  • nrowncol用来指定行数和列数。
  • byrow=FALSE指定矩阵的填充模式是按行还是按列,默认是按列的
  • dimnames可以接受一个二元列表dimnames[[1]]是行名,dimnames[[2]]是列名,都是字符型向量。
  • 对矩阵的索引中方括号包含逗号分割的两个参数,x[i, ]表示第i行,x[, j]表示第j列,x[i, j]表示第i行第j列。逗号两边的参数可以用数值列表,来表示多行多列。

数组:与矩阵类似,但维数可以大于2,可通过array()创建。

myarray <- array(vector, dimensions, dimnames)
  • dimensions是一个数值向量,给出各个维度的最大下标
  • dimnames是一个和dimensions等长的字符型列表,给出各个维度的名字,每个列表元素是一个与dimensions对应位置等长对应的字符串向量。

Unit 2:数据框、因子

数据框:可以包含不同模式的数据,是R中最常处理的数据类型,用data.frame()创建。

mydata <- data.frame(col1, col2, col3, ...)
  • 数据框中,每一个col是列向量,它们的数据类型相同。

  • 每一列的名称可以由函数names()指定,用法为names(mydata) <- ...

  • 也可以在赋值时直接给列命名,如

    mydata <- data.frame(
    C1 = col1,
    C2 = col2,
    C3 = col3
    )

    这里使用的是=而不是<-

  • 数据框可以看成矩阵的推广,但是矩阵索引逗号是必须的,数据框却可以不加逗号,此时的数值索引代表列索引,如果要表示第i行,应该使用mydata[i, ]

  • $符号可以用来访问数据框中的某一列。

为了简化代码,可以使用attach()detach()with()函数。

  • 函数attach()将数据框添加到R的搜索路径中,detach()则将数据框从搜索路径移除。

  • 函数with()可以创建一个针对数据框的环境,用法是

    with(mydata, {
    print(summary(C1))
    plot(C1, C4)
    })
  • 使用with()函数时,赋值仅在with环境中生效。如果要创建全局变量,则应使用特殊赋值符<<-替代标准赋值符<-

实例标识符:实例标识符指的是数据库中的主键,在R中,可以通过row.names()函数来指定,也可以在创建数据框时直接用row.names参数指定。

patientID <- c(1, 2, 3, 4)
age <- c(25, 34, 28, 52)
diabetes <- c("Type1", "Type2", "Type1", "Type2")
status <- c("Poor", "Improved", "Excellent", "Poor")
patientdata <- data.frame(patientID, age, diabetes, status)
row.names(patientdata) <- patientID

对于数据框,可以用str()函数来显示其结构,用summary()函数来显示其统计概要

名义变量和有序变量在R中称为因子,函数factor()以一个整数向量的形式存储类别值,整数的范围是\([1, k]\),\(k\)是名义变量中唯一值的个数,同时由一个字符串组成的内部向量将映射到这些整数上

如果有向量diabetes <- c("Type1", "Type2", "Type1", "Type1"),则以下语句:

diabetes <- factor(diabetes)

可以将其储存为(1, 2, 1, 1),并在内部将其映射为1 = Type12 = Type2

要表示有序型变量,需要将factor()函数的order属性指明为TRUE,并用levels属性指定其因子排序(如果不指定,则按照字典序排列,一般情况下这不好)。

数值型变量可以用levelslabels参数来编码成因子。

如果有向量sex <- c(1, 2, 1, 1),则以下语句:

sex <- factor(sex, levels=c(1, 2), labels=c("Male", "Female"))

可以将其转化为因子c("Male, "Female", "Male", "Male"),并且所有不是1, 2的值将被转化为缺失值

Unit 3:列表

列表是一些对象的有序集合,且这些对象之间可以是毫不相关的,用list()函数创建一个列表。

mylist1 <- list(object1, object2, ...)

mylist2 <- list(name1=object1, name2=object2, ...)

g <- "My First List"
h <- c(25, 26, 18, 39)
j <- matrix(1:10, nrow=5)
k <- c("one", "two", "three")
mylist3 <- list(title=g, ages=h, j, k)
  • 列表的访问用双重方括号,其中可以是数字索引,也可以是字符串表示的名字(需引号)。
  • 列表的访问可以用$符号,这样访问变量名不需要用引号。
  • 许多R函数的运行结果都以列表的形式返回。

Part 2:数据的输入

参考链接:《R数据的导入和导出》。

R语言拥有内置的文本编辑器,这使得手动输入数据十分方便。在R中,edit()可以调用这个文本编辑器,并且在关闭文本编辑器后返回一个副本。

mydata <- data.frame(age=numeric(0), gender=character(0), weight=numeric(0))
mydata <- edit(mydata) # 弹出文本编辑器 fix(mydata) # 第二行的等价写法

除此外,我们常常会遇到较大的数据集,需要导入。请不要小看数据集的导入,在实际操作中导入可能会出现许多问题。

Unit 1:导入带分隔符的文本文件

这种文件类型主要指csv, tsv等,使用的函数是read.table(file, options)。这里file是文件路径,options是可选择的选项。

  • header:文件是否在第一行包含了变量名,如果是,需要设置成TRUE
  • sep:分隔符,默认为sep="",包含了空字符(一个或多个空格,回车,制表符)。除此外,常用的制定值有sep=","sep="\t"
  • row.names:指定行标记符。
  • col.names:如果header=FALSE,就可以用此参数指定一个包含变量名的字符向量。如果header=FALSE且没有指定col.names,则会自动命名为V1, V2, ...
  • na.strings:用于表示缺失值的字符向量。如na.strings=c("?"),就表示将读取到的"?"设置为NA
  • colClasses:可以为每一列指定数据类型,当读取大型文本文件时,可以可观提升处理速度。
  • quote:用于对有特殊字符的字符串划定界限的字符串,默认是单引号或双引号。
  • skip:读取数据前跳过的行的数目,适用于具有头注释的文本文件。
  • stringsAsFactors:标记字符向量是否需要转化为因子,默认是TRUE,除非被colClasses所覆盖。
  • text:一个指定文字进行处理的字符串,用来取代file(几乎不用,如果这样做为什么不直接使用edit()?)

比较常用的选项可能是skip(先看看是否有头注释)、header(再看看是否包含变量名)、sep(选择分界符,这要用文本编辑器观察一下以免被Excel欺骗)、col.names(是否需要自己指定变量名)、na.strings(是否需要处理缺失值)、stringsAsFactor(有时候不希望字符串被转化)。

Unit 2:导入Excel数据

导入Excel数据最简单的方式,是通过导出为CSV格式,再使用read.table()函数读取。也可以使用xlsx包中提供的read.xlsx()函数进行读取。

library(xlsx)
mydata <- read.xlsx(file, n)

这里file是工作路径,n是工作表的索引。除此外,read.xlsx还具有如下常用的可选参数:

  • rowIndex:一个可选的数值向量,指定需要读取的行号。如果不指定此参数,且下面的startRowendRow也不指定,则会读取所有的行。
  • startRow:当rowIndex缺省时生效,指定开始读取的行号(单个数值),适用于含有头注释的xlsx文件。
  • endRow:当rowIndex缺省时生效,指定结束读取的行号(单个数值)。
  • colIndex:一个可选的数值向量,指定需要读取的列号。如果不指定此参数则读取所有的列。
  • header:在需要读取的行号中,是否将第一行作为变量名。
  • colClasses:与read.table()函数中的一致。
  • encoding:如果表格中含有中文,则需要指定encoding='UTF-8'

尤其需要注意encoding参数,对于我们需要读取中文数据时十分有用。

Part 3:处理数据对象的函数

以下部分函数的实用性超乎我的想象,但是先前见到的R教程几乎没有提及。

  1. length(object):显示对象中元素的数量。
  2. dim(object):显示某个对象的各维度长度,即各个维度的下标上限。向量的维度显示为NULL(应该使用length()),数据框、矩阵、数组等维度将返回一个向量。
  3. str(object):显示某个对象的结构。
  4. class(object):显示某个对象的类或类型,如"numeric", "data.frame", "integer", "factor"
  5. mode(object):显示某个对象的模式,如"numeric", "list"。这不会给出data.frame, factor之类的返回,实际上我也不能很好地区分class()mode()
  6. names(object):显示对象中各成分的名称。
  7. c(object, object, ...):将对象合并成一个向量。
  8. cbind(object, object, ...):按列合并对象,适用于合并数据框。
  9. rbind(object, object, ...):按行合并对象。
  10. object:输出某个对象。
  11. head(object):列出某个对象的开始部分,可类比Pandas库。
  12. tail(object):列出某个对象的最后部分。
  13. ls()显示当前的对象列表。
  14. rm(object, object, ...):删除对象。有一句常用的清除几乎所有对象的语句是rm(list=ls())
  15. newobject <- edit(object):直观地编辑对象,并另存为newobject。如果没有赋值,编辑将不会生效。
  16. fix(object):直接编辑对象,不需要赋值。

R语言学习1:基本数据类型,文件读取的更多相关文章

  1. R语言学习笔记之外部文件读取

    在win32位的系统下,RODBC包内的函数是可以直接运行的,但在win64位的系统则不支持! 1.读取外部文件read.table()---csv,txt,excel 最基本函数是read.tabl ...

  2. R语言学习笔记(数据的读取与保存)

    library(MASS)#载入package MASSdata(package="MASS") #查看MASS中的数据集data(SP500,package="MASS ...

  3. R语言编程艺术#01#数据类型向量(vector)

    R语言最基本的数据类型-向量(vector) 1.插入向量元素,同一向量中的所有的元素必须是相同的模式(数据类型),如整型.数值型(浮点数).字符型(字符串).逻辑型.复数型等.查看变量的类型可以用t ...

  4. R语言学习 第四篇:函数和流程控制

    变量用于临时存储数据,而函数用于操作数据,实现代码的重复使用.在R中,函数只是另一种数据类型的变量,可以被分配,操作,甚至把函数作为参数传递给其他函数.分支控制和循环控制,和通用编程语言的风格很相似, ...

  5. 一份关于Swift语言学习资源的整理文件

    一份关于Swift语言学习资源的整理文件     周银辉 在这里下载 https://github.com/ipader/SwiftGuide

  6. R语言学习笔记:向量

    向量是R语言最基本的数据类型. 单个数值(标量)其实没有单独的数据类型,它只不过是只有一个元素的向量. x <- c(1, 2, 4, 9) x <- c(x[1:3], 88, x[4] ...

  7. R语言学习——R读取txt、csv、xls和xlsx格式文件

    最近项目中运用到了R读取文件数据,所以把相关好用的.经过验证的方法总结了一下,有效避免下次入坑. 1. R读取txt文件 使用R读取txt文件直接使用read.table()方法进行读取即可,不需要加 ...

  8. R语言学习笔记之: 论如何正确把EXCEL文件喂给R处理

    博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html ---- 前言: 应用背景兼吐槽 继续延续之前每个月至少一次更新博客,归纳总结学习心得好习惯. ...

  9. R语言学习笔记:读取前n行数据

    常规读取 一般我们读取文件时都会读取全部的文件然后再进行操作,因为R是基于内存进行计算的. data <- read.table("C:\\Users\\Hider\\Desktop\ ...

  10. R语言学习笔记 (入门知识)

    R免费使用:统计工具:# 注释,行注释块注释:anything="这是注释的内容"常用R语言编辑器:Rsutdio,Tinn-R,Eclipse+StatET:中文会有乱码帮助:? ...

随机推荐

  1. spark 下java list 或者scala list 转DataFrame or DataSet 总结

    一.JAVA list 转 DataFrame or DataSet case class CaseJava( var num: String, var id: String, var start_t ...

  2. RocketMQ(2) 消息的生产和存储

    ## 一 : 消息的生产 1. 消息的生产过程 Producer在发送消息时可以将消息写入到指定topic的某Broker中的某Queue中,其经历了如下过程: Producer发送消息之前,会先向N ...

  3. SpringCloud Nacos

    1.Nacos简介 SpringCloud Alibaba 由来: 因为原先Spring Cloud 的许多组件都是对Netflix 公司的各种框架进行封装, 然后因为Netflix公司对后续更新的各 ...

  4. wsl使用记录

    # wsl使用记录 安装 直接参考微软官方文档使用 WSL 在 Windows 上安装 Linux ubuntu可用发行版安装 https://ubuntu.com/wsl 访问 方式一:在资源管理器 ...

  5. aardio 嵌入 其他应用程序

    aardio 嵌入 其他应用程序 需求 这个chrome壳不能进行拖拽和缩放,所以再套一个壳,可以再分屏的时候用 import win.ui; /*DSG{{*/ winform = win.form ...

  6. Git Flow 的正确使用姿势 - 分支 branch - master dev 使用方式

    Git Flow 的正确使用姿势 https://www.jianshu.com/p/41910dc6ef29

  7. bat 执行 窗口jar包

    bat 执行 窗口jar包 @echo off start javaw -jar .\yourname.jar exit

  8. 关于hashCode和equals重写

    规则 只要重写equals,就必须重写hashCode. 用Set存储对象或者用对象作为Map的键时,必须重写hashCode.也就是说,当需要用对象的哈希值来判断对象是否相等时必须重写hashCod ...

  9. Prometheus四种指标及PromQL实例

    Prometheus四种主要的指标类型包括Counter.Gauge.Histogram和Summary,以及相应的PromQL实例如下: Counter(计数器) 作用:只增不减的计数器,常用于记录 ...

  10. day03-模块化编程

    模块化编程 1.基本介绍 传统的非模块化开发有如下的缺点:(1)命名冲突(2)文件依赖 JavaScript代码越来越庞大,JavaScript引入模块化编程,开发者只需要实现核心的业务逻辑,其他都可 ...