R语言学习1:基本数据类型,文件读取
本系列是一个新的系列,在此系列中,我将和大家共同学习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
,包含了矩阵的元素。nrow
、ncol
用来指定行数和列数。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 = Type1
和2 = Type2
。
要表示有序型变量,需要将factor()
函数的order
属性指明为TRUE
,并用levels
属性指定其因子排序(如果不指定,则按照字典序排列,一般情况下这不好)。
数值型变量可以用levels
和labels
参数来编码成因子。
如果有向量
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
:一个可选的数值向量,指定需要读取的行号。如果不指定此参数,且下面的startRow
和endRow
也不指定,则会读取所有的行。startRow
:当rowIndex
缺省时生效,指定开始读取的行号(单个数值),适用于含有头注释的xlsx
文件。endRow
:当rowIndex
缺省时生效,指定结束读取的行号(单个数值)。colIndex
:一个可选的数值向量,指定需要读取的列号。如果不指定此参数则读取所有的列。header
:在需要读取的行号中,是否将第一行作为变量名。colClasses
:与read.table()
函数中的一致。encoding
:如果表格中含有中文,则需要指定encoding='UTF-8'
。
尤其需要注意encoding
参数,对于我们需要读取中文数据时十分有用。
Part 3:处理数据对象的函数
以下部分函数的实用性超乎我的想象,但是先前见到的R教程几乎没有提及。
length(object)
:显示对象中元素的数量。dim(object)
:显示某个对象的各维度长度,即各个维度的下标上限。向量的维度显示为NULL
(应该使用length()
),数据框、矩阵、数组等维度将返回一个向量。str(object)
:显示某个对象的结构。class(object)
:显示某个对象的类或类型,如"numeric", "data.frame", "integer", "factor"
。mode(object)
:显示某个对象的模式,如"numeric", "list"
。这不会给出data.frame, factor
之类的返回,实际上我也不能很好地区分class()
和mode()
。names(object)
:显示对象中各成分的名称。c(object, object, ...)
:将对象合并成一个向量。cbind(object, object, ...)
:按列合并对象,适用于合并数据框。rbind(object, object, ...)
:按行合并对象。object
:输出某个对象。head(object)
:列出某个对象的开始部分,可类比Pandas库。tail(object)
:列出某个对象的最后部分。ls()
显示当前的对象列表。rm(object, object, ...)
:删除对象。有一句常用的清除几乎所有对象的语句是rm(list=ls())
。newobject <- edit(object)
:直观地编辑对象,并另存为newobject
。如果没有赋值,编辑将不会生效。fix(object)
:直接编辑对象,不需要赋值。
R语言学习1:基本数据类型,文件读取的更多相关文章
- R语言学习笔记之外部文件读取
在win32位的系统下,RODBC包内的函数是可以直接运行的,但在win64位的系统则不支持! 1.读取外部文件read.table()---csv,txt,excel 最基本函数是read.tabl ...
- R语言学习笔记(数据的读取与保存)
library(MASS)#载入package MASSdata(package="MASS") #查看MASS中的数据集data(SP500,package="MASS ...
- R语言编程艺术#01#数据类型向量(vector)
R语言最基本的数据类型-向量(vector) 1.插入向量元素,同一向量中的所有的元素必须是相同的模式(数据类型),如整型.数值型(浮点数).字符型(字符串).逻辑型.复数型等.查看变量的类型可以用t ...
- R语言学习 第四篇:函数和流程控制
变量用于临时存储数据,而函数用于操作数据,实现代码的重复使用.在R中,函数只是另一种数据类型的变量,可以被分配,操作,甚至把函数作为参数传递给其他函数.分支控制和循环控制,和通用编程语言的风格很相似, ...
- 一份关于Swift语言学习资源的整理文件
一份关于Swift语言学习资源的整理文件 周银辉 在这里下载 https://github.com/ipader/SwiftGuide
- R语言学习笔记:向量
向量是R语言最基本的数据类型. 单个数值(标量)其实没有单独的数据类型,它只不过是只有一个元素的向量. x <- c(1, 2, 4, 9) x <- c(x[1:3], 88, x[4] ...
- R语言学习——R读取txt、csv、xls和xlsx格式文件
最近项目中运用到了R读取文件数据,所以把相关好用的.经过验证的方法总结了一下,有效避免下次入坑. 1. R读取txt文件 使用R读取txt文件直接使用read.table()方法进行读取即可,不需要加 ...
- R语言学习笔记之: 论如何正确把EXCEL文件喂给R处理
博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html ---- 前言: 应用背景兼吐槽 继续延续之前每个月至少一次更新博客,归纳总结学习心得好习惯. ...
- R语言学习笔记:读取前n行数据
常规读取 一般我们读取文件时都会读取全部的文件然后再进行操作,因为R是基于内存进行计算的. data <- read.table("C:\\Users\\Hider\\Desktop\ ...
- R语言学习笔记 (入门知识)
R免费使用:统计工具:# 注释,行注释块注释:anything="这是注释的内容"常用R语言编辑器:Rsutdio,Tinn-R,Eclipse+StatET:中文会有乱码帮助:? ...
随机推荐
- 【Azure Redis 缓存】Redis的指标显示CPU为70%,而Service Load却达到了100%。这两个指标意义的解释及如何缓解呢?
问题描述 为什么Redis的指标显示CPU为70%,而Service Load却达到了100%, 如何来解释这两个指标,以及如何来缓解这样的情况呢? 问题回答 CPU指标:该值表示的是用于 Redis ...
- 机器学习可解释性--LIME
A Unified Approach to Interpreting Model Predictions trusting a prediction or trusting a model 如果⼀个机 ...
- 使用OpenTelemetry进行监控
工具介绍 注意:该部分介绍摘抄自:https://www.aiwanyun.cn/archives/174 Prometheus.Grafana.Node Exporter 和Alertmanager ...
- Linux_Centos_yum报错总结
此篇适用于yum报错[尝试其他镜像]并且[curl 外网]不通的情况,此时一般考虑是网络的问题 一,出现的报错信息: 此时测试curl / ping www.baidu.com会发现无法连通 二, ...
- FolkMQ 是怎样进行消息的事务处理?
FolkMQ 提供了二段式提交的事务提交的机制(TCC 模型).允许生产者在发送消息时绑定到一个事务中并接收事务的管理,以确保消息的原子性(要么全成功,要么全失败).在 FolkMQ 中,事务是通过 ...
- 协议I2C
SCL SDA 同步,半双工 开漏+弱上拉,谁用这跟线,就下拉成低电平 想输出,去拉杆子或放手,操作杆子变化 想输入,直接放手,看电平高低就行 线与,一个低电平,全部低电平,可以利用这个执行多 ...
- 基于python的每日固定时间执行实例解析
一 概念 datetime模块属性如下所示: 二 源码解析 该源码中,对时间库datetime应用十分到位,可以看作如下所示: import datetime import threading d ...
- day02-功能实现02
功能实现02 6.功能05-显示家居信息 6.1需求分析 进入后台系统,可以在页面进行所有家居信息的展示 6.2思路分析 完成从后端代码从mapper(dao层)-->Service层--> ...
- Some characters cannot be mapped using 'ISO-8859-1'解决方案
问题: MyEclipse中:Some characters cannot be mapped using 'ISO-8859-1' character encoding 分析:由于默认的字符是I ...
- 07.Java类加载问题
目录介绍 7.0.0.1 Java内存模型里包含什么?程序计数器的作用是什么?常量池的作用是什么? 7.0.0.2 什么是类加载器?类加载器工作机制是什么?类加载器种类?什么是双亲委派机制? 7.0. ...