认识数据集的内在

  • 数据集的概念
  • 数据结构的类型
    • 1)标量
    • 2)向量
    • 3)矩阵
    • 4)数组
    • 5)数据框
    • 6)因子
    • 7)列表
  • 识别数据集结构的代码
  • 数据的导入
  • 数据的导出

   数据的收集这是任何数据分析的第一步。同时,这也是学习R语言过程重要的入门环节。特别是初学过程,更多的是模仿学习。由于不理解数据结构,导致无法正确模仿数据格式并无法正常运行代码。因此,与大家分享R语言的基础内容:数据集概念,数据结构、数据输入及导出。主要讲解相应内容的R包及函数使用,希望大家学习后能解决以下问题:1) 数据集有哪些类型的变量组成;2) 清楚数据集的数据结构;3) 读取各类型文件的数据;4) 成功导出所需要的数据。

数据集的概念

数据集通常是由数据构成的一个矩形数组,行表示观测,列表示变量。例如,土壤学领域(土壤基本的理化因子)的通常数据情况:当然行列的数据类型也并非固定。

在R中,数据集包括以下两步:1)选择一种数据结构来储存数据;2)将数据输入或导入到这个数据结构中。另外,R主要可处理的数据类型包括数值型、字符型、逻辑型(TRUE or FALSE)、复数型(虚数)和原生型(字节)。

数据结构的类型

R拥有许多用于存储数据的对象类型,包括标量、向量、矩阵、数组、数据框和列表。它们在储存数据的类型、创建方式、结构复杂度,及定位和访问其中某元素的方法等均有所差异。接下来一一介绍。

1)标量

与C语言不同,R语言中,单个数据(标量)没有单独的数据类型,它只是向量的一种特例,标量以单元素向量的形式出现。标量是只含一个元素的向量,例如f <- 3、g <- "US"和h <- TRUE。它们用于保存常量。因此,R中最基本的数据类型是向量。

a <-  -5  # 可以是数字1,‘abc’字符,TRUE or FALSE 等

2)向量

向量是用于存储数值型、字符型或逻辑型数据的一维数组。执行组合功能的函数c()可用来创建向量。例如:

a <- c(2, 3, 4, 5, 5, -1, -2); a # a属于数值型向量
b <- c("first", "second", "third"); b # b属于字符型向量
c <- c(TRUE, TRUE, TRUE, TRUE, TRUE, FALSE); c # c是逻辑型向量
class(a)
class(b)
class(c)

我们可以使用a[c(2, 4)]访问向量a中的第二个和第四个元素。此外,我们具体看下面例子:

a[c(2,4)]

3)矩阵

矩阵是一个二维数组,只是每个元素都拥有相同的数据类型(同上三种)。可用函数matrix()创建矩阵。

x <- matrix(1:20, nrow = 4, ncol = 5) #1 创建一个4×5的矩阵
x
class(x)
cells <- c(1, 26, 24, 68)
rnames <- c("R1", "R2")
cnames <- c("C1", "C2")
mymatrix <- matrix(cells, nrow = 2, ncol = 2, byrow = TRUE,dimnames = list(rnames, cnames)) #2 按行填充3×3的矩阵,根据逻辑byrow = TRUE
mymatrix
mymatrix <- matrix(cells, nrow = 2, ncol = 2, byrow = FALSE,dimnames = list(rnames, cnames)) #3 按列填充3×3的矩阵,根据逻辑byrow = FALSE
mymatrix
class(mymatrix)


我们可以使用下标和方括号来选择矩阵中的行、列或元素。x[i, ]指矩阵中x中的第i行,x[i, j]指第i行第j个元素。选择多行或多列时,下标i和j可为数值型向量。For example:

x <- matrix(1:9, nrow = 3) # 构建了一个内容为数字1到9的3×3矩阵 默认下,按行列填充
x # 查看所构建的矩阵
x[3,] # 选择了第三行的元素
x[,3] # 选择了第三列的元素
x[1,3] # 又选择第一行第三列的元素
x[1,c(2,3)] # 最后选择了位于第一行第二、第三的元素

4)数组

数组(array)与矩阵类似,但纬度可以大于2。数组可以用array函数构建,例如:

my_array <- (vector, dimensions, dimnames)

vector包含数组中的数据,dimen.是数值型向量,给出各维度下标的最大值,而dimnames是可选的、各维度名称标签的列表。接下来,构建一个三维(2×3×3)数值型数组:

dim1 <- c("a1", "a1") # 引号内的名称是我随便输入的,都是字符型
dim2 <- c("bb1", "bb2", "bb3")
dim3 <- c("ccc1", "ccc2", "ccc3")
z <- array(1:18, c(2, 3, 3), dimnames = list(dim1, dim2, dim3))
z

5)数据框

由于不同的列包含不同类型的数据,数据框的概念较矩阵来说更一般。通常数据框是R中最常处理的数据结构。数据框可通过函数data.frame()创建:

mydata <- data.frame (col1,col2,col3) # col1,2,3 等可为任何类型。每一列的名称可以由names函数指定

具体例子:

ID <- c(1, 2, 3, 4)
age <- c(20, 35, 15, 55)
diabetes <- c("T1", "T2", "T3" , "T4")
status <- c("Poor", "Improved", "Excellent", "Improved")
patientdata <- data.frame(ID, age, diabetes, status)
patientdata
#需要注意,每一列数据的类型必须唯一,但可以将多个类型的不同列放到一起组成数据框。

关于选取数据框中的元素的方式有很多种,我们可以使用矩阵中的方括号标记法,也可直接指定列名:

patientdata[1:2] # 选取第一列到第二列的数据
patientdata[c("diabetes","status")] # 选取变量名为d...,s...的数据
patientdata$age # 标记号$是用来选取数据框中的特定age变量#另外,如果想生成变量diabetes和变量status的列联表,可以使用table函数
table(patientdata$diabetes, patientdata$status)

6)因子

类别(名义型)变量和有序类别(有序型)变量在R中称为因子(factor)。因子在R中非常重要,因为它决定了数据的分析方式以及如何进行视觉呈现。例如:

ID <- c(1, 2, 3, 4)
age <- c(25, 35, 15, 55)
diabetes <- c("T1", "T2", "T1", "T1")
status <- c("Poor", "Improved", "Excellent", "Poor")
diabetes <- factor(diabetes) # factor 函数因子用于将向量编码为因子
status <- factor(status, order = TRUE) # order 逻辑标志,用于确定是否应该将级别视为有序的
patientdata <- data.frame(ID, age, diabetes, status) # 构建新的数据集
str(patientdata) # 查看数据集结构 也可以用class 但是这个函数查阅的结果比较简单
summary(patientdata) # summary是一个通用函数,用于生成各种模型拟合函数结果

7)列表

列表(list)是R的数据类型中最为复杂的一种。通常,列表就是一些对象或成分的有序集合。列表允许你整合若干对象到单个对象名下。例如,某个列表中可能包含若干向量、矩阵、数据框,甚至其他列表的组合。可用list()函数构建列表:

mylist <- list(obj1, obj2,...)
# 也可以为列表中的对象命名
mylist <- list(name1=obj1, name2=obj2,...)

具体例子:

a <- "my list" # 构建列表的title
b <- c(20, 25, 26, 35)
c <- matrix(1:8, nrow=4) # 构建一个矩阵 8个值 4行
d <- c("first", "second", "third")
mylist <- list(title=a, ages=b, c, d) # 构建一个列表, 并用age 命名
mylist # 输出列表内容 包含一个字符串、数值型向量、矩阵及字符型向量


提取数据:

mylist[[2]]
mylist[["ages"]] # 两种方法提取出一样的结果

识别数据集结构的代码

常用用于识别数据集结构的代码如下:

mode(data)
class(data)
str(data)

例子:

这里推荐主要用str()函数,因为该函数不仅仅能够判断数据结构,还可以查看数据集中变量的类型和名称数值等等。

数据的导入

使用R进行数据分析的时候,首先要导入数据。R语言支持的数据类型很多,包括、excel文件,csv文件,txt文件等。很多人初学者甚至还没开始就已经对R语言放弃了,正是倒在了数据导入这一步。下面给大家提供几种常见的数据导入方法。
1)使用键盘手动输入数据
有两种常见的方式:用R内置的文本编辑器和直接在代码中导入数据。首先,利用文本编译器。
R中的函数edit()自动调用一个手动输入数据的文本编译器。步骤如下:
①创建一个空的数据框/矩阵,其中变量名和变量的类型需与理想中的最终数据集一致;
②针对这个数据对象调用文本编译器,输入数据,并将结果保存回此数据对象。

例子:先创建一个名为data的数据框,含有三个变量:数值型,字符型和数值型。然后使用文本编译器,键入数据,最后保存结果。

data <- data.frame(time=numeric(0), type=character(0), hight=numeric(0)) # 0 表示不定义具体值
data <- edit(data)

通过edit()函数调用出数据编辑器,如下图

R软件弹出数据编辑器后,我们就可以点击第四列格子进行变量的定义。例如这里点击"var4"后,就会弹出一个编辑器,这里我们就可以对变量的变量名和类型(数值,字符)进行定义。

定义好变量后,可以进行手动输入数据。不过这种方式只适合少量的数据输入,当数据量比较大时,建议使用其他的方式导入数据。此外,可以直接在程序中嵌入数据集,例如:

mydatatxt <- "age gender weight25 m 16630 f 11518 f 120"
mydata <- read.table(header = TRUE,text=mydatatxt)


2)使用函数导入数据(主要以excel文件格式为主)
①导入csv或txt文件,使用基础的read.table()函数导入数据。另外,也可以使用read.csv()函数。该函数可以读入一个表格格式的文件并保存为一个数据框。基本的语法表达式:

dat <- read.table(file, header=TRUE, sep="", row.names=1)
dat <- read.csv(file, header=TRUE, sep=",", row.names=1)

主要的参数理解:
file:文件路径(注意:Windows路径要用斜杠 " / " or 双反斜杠 " \ “)。
header:默认为FALSE,即数据框的列名默认系统自带的V1,V2…Vn,为TRUE时第一行作为每列的列名。
sep:分隔符,默认为空格,可以设置为逗号(comma) sep=”,“,分号(semicolon) sep=” ; "及制表符(tab)。
row.names:是可选参数,表示行标识符的变量。当row.names=1时表示第一列作为每一行的行名,当row…=2时,表示第二列,数字表示某一列。特别是,该参数使用的时候,该列中不能存在重复名,否则报错。

具体:

data <- read.table("C:/Program Files/R/R-3.6.1/library/xx.txt", header = T)
data <- read.csv("C:/Program Files/R/R-3.6.1/library/xx.csv", header = T)

②导入excel文件,需要用到R包library(xlsx),可以直接导入Excel工作表。但是要确保第一次使用前先进行下载和安装。同时也需要xlsxJars和rJava包还有openxlsx包,及一个正常工作的Java安装(http://java.com)。优势:一个文件夹存储多个sheet,数据读取的时候不需要新建多个文件。基本的语法表达式:

mydata <- read.xlsx(file, sheet=n)

主要的参数理解:
file:文件路径(注意:Windows路径要用斜杠 " / " or 双反斜杠 " \ ")。
sheet:n表示xlsx格式下,不同sheet的表格。n=1表示读取第一个sheet,以此类推。特别是,如果漏写n会报错。

具体过程:

library("openxlsx")
data <- read.xlsx("C:/Program Files/R/R-3.6.1/library/xx.xlsx", 1)

数据的导出

通常在分析时候,我们需要用到计算后的结果,需要把计算的结果导出。这里我们常用到的函数有write.table,write.csv来导出txt,csv格式的文件。另外,write.xlsx用来导出xlsx格式的文件。这里,我们选择最基础的write.table的语法表达式进行介绍,剩下的导出方式建议大家用help()函数进行查阅或 ?函数名进行查阅:

a <- data(mpg) # 将R语言自带的数据集mpg赋值给a
write.table (a, file ="", sep ="", row.names =TRUE, col.names =TRUE, quote =TRUE) # 导出a名下的数据

x:需要导出的数据,这里是指前面赋值过的数据。
file:导出的文件路径。
sep:分隔符,默认为空格(" "),也就是以空格为分割列。
row.names:是否导出行序号,默认为TRUE,也就是导出行序号。
col.names:是否导出列名,默认为TRUE,也就是导出列名。
quote:字符串是否使用引号表示,默认为TRUE,也就是使用引号表示。

例如:将数据框C输出为.csv文件

C <- data(iris)
write.table(C, file="ABC.csv",sep = ",",row.names=FALSE) # 将保存ABC文件在R的工作目录下,当不加sep = " "时,输出的数据会在同一个单元格里,因此要加“,”。

入门必学 | R语言数据集结构的解读指南相关推荐

  1. 入门必学 | R语言数值型、字符型及因子型数据之间的差异与转换

    字符型.数值型及因子型数据之间的转换 数据类型的基本知识 不同数据类型之间的差异 数值型与字符型或因子型绘图时的差异 数值型与因子型和字符型的模型构建时的差异 三种数据类型之间进行转换    常用的三 ...

  2. 入门必学 | R语言数据的独立性,正态性及方差齐性检验

    参数分析的三大前提检验 检验数据独立性的方法 Chisq检验 Fisher检验 Cochran-Mantel-Haenszel检验 检验数据正态性的方法 shapiro.test函数 qqnorm函数 ...

  3. 【笔记-java】java工程师-入门必学

    路径 目录 子目录 重点 课程名 备注 java工程师 入门必学 语法基础 环境搭建.开发工具使用.基础语法 java入门第一季 面向对象 继承.封装.多态 java入门第二季 常用工具类 异常.字符 ...

  4. [新手必备]Python 基础入门必学知识点笔记

    Python 作为近几年越来越流行的语言,吸引了大量的学员开始学习,为了方便新手小白在学习过程中,更加快捷方便的查漏补缺.根据网上各种乱七八糟的资料以及实验楼的 Python 基础内容整理了一份极度适 ...

  5. 编程行业高手级别必学C语言,要挣大钱必学C语言,要做黑客、红客必学C语言,要面试名企、外企、高薪职位必学C语言。

    于大部分程序员, C语言 是学习 编程 的第一门语言,很少有不了解C的程序员. C语言除了能让你了解编程的相关概念,带你走进编程的大门,还能让你明白程序的运行原理,比如,计算机的各个部件是如何交互的, ...

  6. R语言︱数据集分组、筛选(plit – apply – combine模式、dplyr、data.table)

    R语言︱数据集分组 大型数据集通常是高度结构化的,结构使得我们可以按不同的方式分组,有时候我们需要关注单个组的数据片断,有时需要聚合不同组内的信息,并相互比较. 一.日期分组 1.关于时间的包都有很多 ...

  7. zbrush常用笔刷_【建模】新手入门必学,ZBrush中常用笔刷简介!

    原标题:[建模]新手入门必学,ZBrush中常用笔刷简介! 单击左托盘的笔刷图标,弹出一个笔刷库,其中有许多常用笔刷,这也是许多初学者所头疼的问题,zbrush的笔刷非常多,而且功能很强大,好多朋友不 ...

  8. “跟着菜鸟一起学R语言” 现已更名为“数据志”

    大家好,我的公众号"跟着菜鸟一起学R语言" 现已更名为"数据志",欢迎大家关注,谢谢.

  9. ue4导入倾斜摄影_倾斜摄影入门必学|Context Capture建模软件工作流程

    对于一个典型的 倾斜摄影入门必学|Context Capture建模软件工作流程​www.swqy3d.com 来讲,分为了如下几步:1 新建项目后导入照片.POS.点云等数据.①导入照片 ②当你新建 ...

  10. r语言中矩阵QR分解_从零开始学R语言Day4|向量、矩阵和数组

    从零开始学R语言Day4|向量.矩阵和数组 1.1向量 1.1.1向量 在Day2中我们提及过用和c()函数来构建向量,具体实例如下. 我们还可以采用vector("类型",长度) ...

最新文章

  1. Flutter中用ListView嵌套GridView报错异常
  2. 系统无ifconfig,一条命令获取本机ip并将其赋值给指定变量来使用
  3. 考个计算机一级要学多久,本科需要考计算机一级吗,大学毕业要求必须考计算机一级,这种情况怎么办?...
  4. echarts python源码_基于Django快速集成Echarts代码示例
  5. eclipse xml文件中按没有提示
  6. Vue v-for生成DOM元素
  7. 两路语音 两路计算机数据综合,两路语音PCM时分复用系统的设计.DOC
  8. Microsoft Visual C++ 14.0 is required (Unable to find vcvarsall.bat)
  9. JS中var和let
  10. 【狂神说Redis】2Redis入门 2-3测试性能
  11. 国外6大高效免费在线学习编程网站
  12. 记录:中债|中证|上清所比较容易混淆的金融大机构
  13. c+primer 学习笔记 6
  14. 五五开周刊(第4期):星链会改变游戏规则吗?
  15. quick-cocos2dx中 B.super.ctor(self) 和 B.super:ctor()的区别
  16. 个性签名代码(花了1个多小时从网上搜集以及整理)
  17. 上可以替代mobaxterm_电能替代 | 基于逻辑回归模型的电能替代用户辨识研究
  18. 刺激战场android闪退,绝地求生刺激战场闪退怎么办 游戏闪退解决办法一览
  19. std list/vector sort 排序就这么简单
  20. 将numeric转换为数据类型numeric时发生算术溢出错误

热门文章

  1. matlab定积分上界求解,定积分问题的数值求解及Matlab实现
  2. uu云验证码识别平台,验证码,验证码识别,全自动验证码识别技术,优优云全自动打码,代答题系统,优优云远程打码平台,uu云打码...
  3. 基于RV1126平台imx291分析 --- 统计已注册的设备信息
  4. 手机可以python编程吗_如何在安卓手机上编程Python代码并运行-百度经验
  5. 漫谈android系统(4)bring up panel
  6. jqueryUI日期控件和时间控件
  7. 层次分析法软件操作步骤(yaahp)
  8. Java数据类型转换
  9. tableau的下载安装及简单使用
  10. html编写在线打字通,金山打字在线练习版 怎么修改金山打字通打字速度?