本系列是一个新的系列,在此系列中,我将和大家共同学习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. 【Azure Redis 缓存】Redis的指标显示CPU为70%,而Service Load却达到了100%。这两个指标意义的解释及如何缓解呢?

    问题描述 为什么Redis的指标显示CPU为70%,而Service Load却达到了100%, 如何来解释这两个指标,以及如何来缓解这样的情况呢? 问题回答 CPU指标:该值表示的是用于 Redis ...

  2. 机器学习可解释性--LIME

    A Unified Approach to Interpreting Model Predictions trusting a prediction or trusting a model 如果⼀个机 ...

  3. 使用OpenTelemetry进行监控

    工具介绍 注意:该部分介绍摘抄自:https://www.aiwanyun.cn/archives/174 Prometheus.Grafana.Node Exporter 和Alertmanager ...

  4. Linux_Centos_yum报错总结

    ​ 此篇适用于yum报错[尝试其他镜像]并且[curl 外网]不通的情况,此时一般考虑是网络的问题 一,出现的报错信息: 此时测试curl / ping www.baidu.com会发现无法连通 二, ...

  5. FolkMQ 是怎样进行消息的事务处理?

    FolkMQ 提供了二段式提交的事务提交的机制(TCC 模型).允许生产者在发送消息时绑定到一个事务中并接收事务的管理,以确保消息的原子性(要么全成功,要么全失败).在 FolkMQ 中,事务是通过 ...

  6. 协议I2C

    SCL   SDA   同步,半双工 开漏+弱上拉,谁用这跟线,就下拉成低电平 想输出,去拉杆子或放手,操作杆子变化 想输入,直接放手,看电平高低就行 线与,一个低电平,全部低电平,可以利用这个执行多 ...

  7. 基于python的每日固定时间执行实例解析

    一 概念 datetime模块属性如下所示:   二 源码解析 该源码中,对时间库datetime应用十分到位,可以看作如下所示: import datetime import threading d ...

  8. day02-功能实现02

    功能实现02 6.功能05-显示家居信息 6.1需求分析 进入后台系统,可以在页面进行所有家居信息的展示 6.2思路分析 完成从后端代码从mapper(dao层)-->Service层--> ...

  9. Some characters cannot be mapped using 'ISO-8859-1'解决方案

    问题: MyEclipse中:Some characters cannot be mapped using 'ISO-8859-1' character encoding   分析:由于默认的字符是I ...

  10. 07.Java类加载问题

    目录介绍 7.0.0.1 Java内存模型里包含什么?程序计数器的作用是什么?常量池的作用是什么? 7.0.0.2 什么是类加载器?类加载器工作机制是什么?类加载器种类?什么是双亲委派机制? 7.0. ...