↑↑↑   关注选刊说   ↑↑↑

您的SCI选刊助手!

2.1 数据结构

数据集通常是由数据构成的一个矩形数组,行表示观测,列表示变量(但不同行业对行和列叫法不同,在R中用观测和变量代表行和列)。
R可以处理的数据类型(模式)包括数值型、字符型、逻辑型(TRUE/FALSE)、复数型(虚数)和原生型(字节)。
R拥有许多用于存储数据的对象类型,包括标量、向量、矩阵、数组、数据框和列表。

1. 标量

标量是只含一个元素的向量,用于保存常量。例如例如 fgh

2. 向量

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

a b c 

注意,单个向量中的数据必须拥有相同的类型或模式(数值型、字符型或逻辑型)。

访问向量中的元素:在方括号中给定元素所处位置

a "k", a[3][1] "h"a[c(1, 3, 5)][1] "k" "h" "c"a[2:6]        #冒号用于生成一个数值序列[1]  "j" "h" "a" "c" "m"

3. 矩阵

矩阵是一个二维数组,只是每个元素都拥有相同的模式(数值型、字符型或逻辑型)。可通过函数matrix()创建矩阵。一般格式:

myymatrix                     byrow=logical_value, dimnames=list(char_vector_rownames, char_vector_colnames))
  1. vector包含了矩阵的元素

  2. nrow和ncol用以指定行和列的维数

  3. 选项byrow则表明矩阵应当按行填充(byrow=TRUE)还是按列填充(byrow=FALSE),默认情况下按列填充

  4. dimnames包含了可选的、以字符型向量表示的行名和列名

创建一个5×4的矩阵:

y <- matrix(1:20, nrow=5, ncol=4)   y     [,1] [,2] [,3] [,4]    [1,]    1    6   11   16    [2,]    2    7   12   17    [3,]    3    8   13   18    [4,]    4    9   14   19    [5,]    5   10   15   20

创建一个按行填充的2×2矩阵:

cells c(rnames c(cnames c(mymatrix 2, ncol=                  dimnames=list(rnames, cnames))  mymatrix          C1 C2    R1  1 26   R2 24 68

创建一个按列填充的2×2矩阵:

mymatrix <- matrix(cells, nrow=2, ncol=2, byrow=FALSE,                   dimnames=list(rnames, cnames))mymatrix   C1 C2R1  1 24R2 26 68

矩阵下标的使用:

x 1:x           [,1] [,2] [,3] [,4] [,5]    [1,]    1    3    5    7    9    [2,]    2    4    6    8   10x[2,]        #选择第二行的元素[1]  2  4  6  8 10 x[,2]        #选择第二列的元素[1] 3 4 x[1,4]       #选择第1行的第4列的元素[1] 7x[1, c(4,5)] #选择第1行的第4和5列的元素[1] 7 9

4. 数组

数组(array)与矩阵类似,但是维度可以大于2。可通过array函数创建,格式如下:

myarray array(vector, dimensions, dimnames)
  1. vector包含了数组中的数据

  2. dimensions是一个数值型向量,给出各个维度下标的最大值

  3. dimnames是可选的、各维度名称标签的列表

创建一个三维(2×3×4)数值型数组:

dim1 "A1", dim2 "B1", dim3 "C1", z 1:z    , , C1          B1 B2 B3    A1  1  3  5    A2  2  4  6    , , C2          B1 B2 B3    A1  7  9 11    A2  8 10 12    , , C3          B1 B2 B3    A1 13 15 17    A2 14 16 18    , , C4          B1 B2 B3    A1 19 21 23    A2 20 22 24

5. 数据框

数据框是包含了不同模式(数值型、字符型等)的数据的集合。可通过函数data.frame()创建:

mydata <- data.frame(col1, col2, col3, ...)
  1. 列向量col1、col2、col3等可为任何类型(如字符型、数值型或逻辑型)

  2. 每一列的名称可由函数names指定

创建数据框:

patientID c(age c(diabetes c(status c(patientdata patientdata        patientID age diabetes    status    1         1  25    Type1      Poor    2         2  34    Type2  Improved    3         3  28    Type1 Excellent    4         4  52    Type1      Poor

每一列数据的模式必须唯一。

选取数据框中的元素:

patientdata[1:2]  patientID age1         1  252         2  34 3         3  284         4  52patientdata[c("diabetes", "status")]  diabetes    status1    Type1      Poor    2    Type2  Improved    3    Type1 Excellent    4    Type1      Poorpatientdata$age         # $用来选取一个给定数据框中的某个特定变量[1] 25 34 28 52

可以联合使用函数attach()和detach()或单独使用函数with()来简化代码,避免每个变量名前都键入一次patientdata$。

attach()、detach()和with()

例:mtcars数据框

summary(mtcars$mpg)plot(mtcars$mpg, mtcars$disp)plot(mtcars$mpg, mtcars$wt)

以上代码可以写成:

attach(mtcars)    #函数attach()可将数据框添加到R的搜索路径中summary(mpg)plot(mpg, disp)plot(mpg, wt)detach(mtcars)    #函数detach()将数据框从搜索路径中移除

detach()并不会对数据框本身做任何处理,可以省略,但其实它应当被例行地放入代码中。

当名称相同的对象不止一个时,这种方法有局限性。

mpg attach(mtcars)The following object(s) are masked _by_ '.GlobalEnv':     mpgplot(mpg, wt)Error in xy.coords(x, y, xlabel, ylabel, log) :      'x' and 'y' lengths differmpg    [1] 25 36 47

在数据框mtcars被绑定(attach)之前,环境中已经有了一个名为mpg的对象,原始对象将取得优先权。函数attach()和detach()最好在分析一个单独的数据框,并且没有多个同名对象时使用

函数with()重写上例:

with(mtcars, {  print(summary(mpg))  plot(mpg, disp)  plot(mpg, wt)})

花括号{}之间的语句都针对数据框mtcars执行,如果仅有一条语句(例如summary(mpg)),那么花括号{}可以省略因此,函数with()的局限性在于,赋值仅在此函数的括号内生效。

with(mtcars, {  stats   stats})stats错误: 找不到对象'stats'

创建在with()结构以外存在的对象,使用特殊赋值符<

with(mtcars, {  nokeepstats   keepstats <})nokeepstats   错误: 找不到对象'nokeepstats'keepstats Min. 1st Qu.  Median    Mean 3rd Qu.    Max.       10.40   15.43   19.20   20.09   22.80   33.90

实例标识符

病人编号(patientID)用于区分病例数据集中不同的个体。实例标识符(case identifier)可通过数据框操作函数中的rowname选项指定。

patientdata                        status, row.names=patientID)

将patientID指定为R中标记各类打印输出和图形中实例名称所用的变量。

6. 因子

变量可归结为名义型、有序型或连续型变量。

  • 名义型变量是没有顺序之分的类别变量

  • 有序型变量表示一种顺序关系,而非数量关系

  • 连续型变量可以呈现为某个范围内的任意值,并同时表示了顺序和数量
    类别(名义型)变量和有序类别(有序型)变量在R中称为因子(factor)

函数factor()以一个整数向量的形式存储类别值,同时一个由字符串(原始值)组成的内部向量将映射到这些整数上。

类别(名义型)变量

diabetes "Type1", diabetes 

将此向量存储为(1, 2, 1, 1),并在内部将其关联为1=Type1和2=Type2(具体赋值根据字母顺序而定)。向量diabetes仍是名义型变量,不是有序型变量。

有序型变量

需要为函数factor()指定参数ordered=TRUE。

status status 

将向量编码为(3, 2, 1, 3),并在内部将这些值关联为1=Excellent、2=Improved以及3=Poor。

对于字符型向量,因子的水平默认依字母顺序创建。
如果水平的顺序和字母的顺序不一致,则需要用指定levels选项来覆盖默认排序。

status                  levels=c("Poor", "Improved", "Excellent"))

各水平的赋值将为1=Poor、2=Improved、3=Excellent,任何在数据中出现而未在参数中列举的数据都将被设为缺失值。

数值型变量

可以用levels和labels参数来编码成因子。

例:如果男性被编码成1,女性被编码成2

sex c(1, 2), labels=c("Male", "Female"))

将变量转换成一个无序因子,性别将被当成类别型变量,标签“Male”和“Female”将替代1和2在结果中输出。

因子的使用:

#以向量形式输入数据patientID age diabetes status #指定为一个普通因子diabetes #指定为一个有序型因子status patientdata #显示对象的结构str(patientdata)'data.frame':  4 obs. of  4 variables:     $ patientID: num  1 2 3 4     $ age      : num  25 34 28 52     $ diabetes : Factor w/ 2 levels "Type1","Type2": 1 2 1 1                 $ status   : Ord.factor w/ 3 levels "Excellent"

diabetes是一个因子;status是一个有序型因子。

#显示对象的统计概要summary(patientdata)   patientID         age         diabetes       status       Min.   :1.00   Min.   :25.00   Type1:3   Excellent:1       1st Qu.:1.75   1st Qu.:27.25   Type2:1   Improved :1       Median :2.50   Median :31.00             Poor     :2       Mean   :2.50   Mean   :34.75                               3rd Qu.:3.25   3rd Qu.:38.50                               Max.   :4.00   Max.   :52.00

函数summary()会区别对待各个变量:

显示连续型变量age的最小值、最大值、均值和各四分位数;

显示类别型变量diabetes和status(各水平)的频数值。

7. 列表

列表(list)是一些对象(或成分,component)的有序集合,某个列表中可能是若干向量、矩阵、数据框,甚至其他列表的组合。
使用函数list()创建列表:

mylist list(object1, object2, ...)

可以为列表中的对象命名:

mylist list(name1=object1, name2=object2, ...)

创建一个列表:

g "My First List"h 25, j 1:k "one", mylist #创建列表mylist                                     #输出整个列表$title    [1] "My First List"$ages    [1] 25 26 18 39    [[3]]               [,1] [,2]    [1,]    1    6    [2,]    2    7    [3,]    3    8    [4,]    4    9    [5,]    5   10    [[4]]    [1] "one"   "two"   "three"mylist[[2]]                                #输出第二个成分[1] 25 26 18 39mylist[["ages"]][1] 25 26 18 39

双重方括号中指明代表某个成分的数字或名称访问列表中的元素。

注意事项

  • 对象名称中的句点(.)没有特殊意义
    R中用美元符号($)指定一个数据框或列表中的某些部分。

  • 将一个值赋给某个向量、矩阵、数组或列表中一个不存在的元素时,R将自动扩展这个数据结构以容纳新值。

x <- c(8, 6, 4)x[7] <- 10x            #通过赋值,向量x由三个元素扩展到了七个元素[1]  8  6  4 NA NA NA 10x <- x[1:3]  #重新将其缩减回三个元素x    [1] 8 6 4
  • R中没有标量。标量以单元素向量的形式出现。

  • R中的下标不从0开始,而从1开始。在上述向量中,x[1]的值为8。

  • 变量无法被声明。它们在首次被赋值时生成。

2.2 数据输入

1. 键盘输入数据

文本编辑器

edit()会自动调用一个允许手动输入数据的文本编辑器。

mydata edit(mydata)         #通过图2-1所示文本编辑器输入数据,但结果并未保存  age gender weight    1  25      m    166    2  30      f    115    3  18      f    120    Warning message:    In edit.data.frame(mydata) : 在'gender'里加上了因子水准

  图2-1 通过文本编辑器输入数据

mydata mydata  age gender weight    1  25      m    166    2  30      f    115    3  18      f    120

语句 mydata的一种等价写法是 fix(mydata)

直接嵌入数据集

mydatatxt  age gender weight 25 m 166 30 f 115 18 f 120 "mydata =TRUE, text=mydatatxt)   #read.table()函数被用于处理字符串并返回数据框

键盘输入数据的方式常用于处理小数据集。对于较大的数据集,可以从现有的文本文件、Excel电子表格、统计软件或数据库中导入数据。

2. 从带分隔符的文本文件导入数据

可以使用read.table()从带分隔符的文本文件中导入数据。其语法如下:mydataframe

  1. file是一个带分隔符的ASCII文本文件

  2. options是控制如何处理数据的选项

表2-1 函数read.table()的选项

选项 描述
header 一个表示文件是否在第一行包含了变量名的逻辑型变量
sep

分开数据值的分隔符

默认是 sep="",这表示了一个或多个空格、制表符、换行或回车 sep=","读取用逗号来分隔行内数据的文件

sep="\t"读取使用制表符来分割行内数据的文件

row.names 一个用于指定一个或多个行标记符的可选参数
col.names 如果数据文件的第一行不包括变量名(header=FASLE),可以用 col.names 去指定一个包含变量名的字符向量
colClasses 可以对每一列都指定一个类(比如说,逻辑型、数值型、字符型或因子型)

例:用逗号分隔的文本文件studentgrades.csv,包含了学生在数学、科学、和社会学习的分数。
StudentID,First,Last,Math,Science,Social Studies
011,Bob,Smith,90,80,67
012,Jane,Weary,75,,80
010,Dan,"Thornton, III",65,75,70
040,Mary,"O'Leary",90,95,92

setwd("~/目标文件所在文件夹")         #定位到目标文件所在文件夹grades     row.names="StudentID", sep=",")  grades                             #显示导入数据   First          Last Math Science Social.Studies    11   Bob         Smith   90      80             67    12  Jane         Weary   75      NA             80    10   Dan Thornton, III   65      75             70    40  Mary       O'Leary   90      95             92str(grades)    'data.frame':  4 obs. of  5 variables:     $ First         : Factor w/ 4 levels "Bob","Dan","Jane",..: 1 3 2 4     $ Last          : Factor w/ 4 levels "O'Leary","Smith",..: 2 4 3 1     $ Math          : int  90 75 65 90     $ Science       : int  80 NA 75 95     $ Social.Studies: int  67 80 70 92

注意:

  1. 列StudentID现在是行名,不再有标签,也失去了前置的0

  2. Dan的姓左右使用引号,避免Thornton和III之间的空格

  3. O’Leary左右使用引号,否则R会把单引号读取为分隔符

  4. 默认地,read.table()把字符变量转化为因子,可以加上选项stringsAsFactors=FALSE避免出现这种情况

  5. 可以用colClasses 选项去对每一列都指定一个类

grades     row.names="StudentID", sep=",",    colClasses=c("character", "character", "character",                 "numeric", "numeric", "numeric"))grades            First          Last Math Science Social.Studies    011   Bob         Smith   90      80             67    012  Jane         Weary   75      NA             80    010   Dan Thornton, III   65      75             70    040  Mary       O'Leary   90      95             92str(grades)    'data.frame':  4 obs. of  5 variables:     $ First         : chr  "Bob" "Jane" "Dan" "Mary"     $ Last          : chr  "Smith" "Weary" "Thornton, III" "O'Leary"     $ Math          : num  90 75 65 90     $ Science       : num  80 NA 75 95     $ Social.Studies: num  67 80 70 92

行名保留了前缀0,而且First和Last不再是因子;grades作为实数而不是整数来进行排序。可以用同样的方法打开txt格式的文本文件。

3. 导入Excel数据

可以在Excel中将其导出为一个逗号分隔文件(csv),并使用前文描述的方式将其导入R中。

可以用xlsx包直接导入

首先需要安装xlsx包,xlsxjars和rJava包,以及一个正常工作的Java 安装(http://java.com)。
函数read.xlsx()导入一个工作表到一个数据框中。格式是:read.xlsx(file,n)

1. file是Excel工作簿的所在路径
2. n则为要导入的工作表序号

例:从目标文件夹的studentgrades.xlsx中导入了第一个工作表,并将其保存为一个数据框mydataframe。

library(xlsx)workbook mydataframe 

R还可以从流行的统计软件、特殊格式的文件、多种关系型数据库管理系统、专业数据库、网站和在线服务中导入数据。具体方法可参见原书。

2.3 数据集的标注

1. 变量标签——为变量名添加描述性的标签

可以将变量标签作为变量名,然后通过位置下标来访问这个变量。

names(patientdata)[2] "Age at hospitalization (in years)"patientdata  patientID Age at hospitalization (in years) diabetes    status    1         1                                25    Type1      Poor    2         2                                34    Type2  Improved    3         3                                28    Type1 Excellent    4         4                                52    Type1      Poor

新的变量名太长,不适合重复输入,可以使用patientdata[2]来引用这个变量。

patientdata[2]        Age at hospitalization (in years)    1                                25    2                                34    3                                28    4                                52

2. 值标签——为类别型变量中的编码添加值标签

函数factor()可为类别型变量创建值标签。

patientdata$gender $gender,                           levels = c(1,2),                           labels = c("male", "female"))
  1. levels代表变量的实际值

  2. labels表示包含了理想值标签的字符型向量

2.4 处理数据对象的实用函数

表2-2 处理数据对象的实用函数

函数 用途
length(object) 显示对象中元素/成分的数量
dim(object) 显示某个对象的维度
str(object) 显示某个对象的结构
class(object) 显示某个对象的类或类型
mode(object) 显示某个对象的模式
names(object) 显示某对象中各成分的名称
c(object, object,...) 将对象合并入一个向量
cbind(object, object, ...) 按列合并对象
rbind(object, object, ...) 按行合并对象
object 输出某个对象
head(object) 列出某个对象的开始部分
tail(object) 列出某个对象的最后部分
ls() 显示当前的对象列表
rm(object, object, ...) 删除一个或更多个对象语句 rm(list = ls())将删除当前工作环境中的几乎所有对象
newobject 编辑对象并另存为 newobject
fix(object) 直接编辑对象

学术交流群

小编,请备注: 单位+研究方向,添加后请说明要加的群

请大家点击右下角

科研菌分享给更多有需要的人

r语言导入ggplot2_R语言教程:数据结构+导入数据!相关推荐

  1. r语言导入ggplot2_R语言 可视化之三大绘图系统概述:base、lattice和ggplot2 | 第7讲...

    原文:R语言 可视化之三大绘图系统概述:base.lattice和ggplot2 | 第7讲 原创: 拴小林 数据驱动实践 1周前 数据可视化是数据分析过程中探索性分析的一部分内容,可以直观展示数据集 ...

  2. r语言导入ggplot2_R语言绘图之ggplot2包

    R语言绘图之ggplot2包 (2018-09-25 03:09:30) 6月份一直在忙期末考试,今天来迅速的学习下ggplot2包的简单绘图. R的基础包里面也有很多画图函数,例如plot();ba ...

  3. r语言导入ggplot2_R语言入门--画图(一)--ggplot2

    先写一些需要用到的知识点,比如包.函数 dplyr 很好用的包 经常与ggplot2连用 mutate:用于对数据框的列进行重新处理,或者用处理的结果添加新列 数据清洗: 1.na.omit()   ...

  4. R语言入门第二集 实验一:R 语言数据结构、数据导入与数据处理

    R语言入门第二集 实验一:R 语言数据结构.数据导入与数据处理 一.资源 R语言基本数据结构练习和数据的导入和处理对象常用函数练习--东北大学大数据班R语言实训第一次作业" R(4)求解数据 ...

  5. R语言使用原生包(基础导入包、graphics)中的plot函数可视化散点图(scatter plot)

    R语言使用原生包(基础导入包.graphics)中的plot函数可视化散点图(scatter plot) 目录

  6. R语言使用原生包(基础导入包、graphics)中的hist函数可视化直方图(histogram plot)

    R语言使用原生包(基础导入包.graphics)中的hist函数可视化直方图(histogram plot) 目录

  7. 进入32位模式并导入c语言教程,《30天自制操作系统》读书笔记(3) 引入C语言

    这一次的学习相当曲折, 主要是因为粗心, Makefile里面的错误导致了文件生成出现各种奇奇怪怪的问题, 弄得心力交瘁, 因此制作过程还是尽量按着作者的路子来吧. 作者提供的源码的注释在中文系统下是 ...

  8. R语言七天入门教程六:文件相关操作

    R语言七天入门教程六:文件相关操作 一.文件的读写 R 语言作为统计学编程语言,常常需要处理大量数据,而这些数据通常会从文件中进行读取,因此文件读写在R语言中是非常重要的操作.在R语言中,用到最多的文 ...

  9. R语言介绍及安装教程

    R语言是一种免费的开源编程语言和环境,主要用于数据分析.统计建模和可视化.它可以运行在不同的操作系统上,如Windows.MacOS和Linux.R语言具有以下特点: 丰富的数据处理和统计分析函数库: ...

最新文章

  1. java轻量级IOC框架Guice
  2. TF-IDF算法讲解
  3. Mybatis常见面试题(10个必备面试题)
  4. kcbzps oracle_Oracle 11g DRCP配置与使用(上)
  5. LightOJ 1266 - Points in Rectangle 二维树状数组
  6. 关于idea中运行maven项目报错显示找不到包或符号的问题——终极方案
  7. 中间件是什么?通俗易懂的解释
  8. 小学计算机技术感想,小学信息技术教学经验总结(精选5篇)
  9. po模型---tpshop项目
  10. 超声检测的不同扫描方式
  11. RSA中的中国剩余定理(CRT)和多素数(multi-prime)
  12. Android中级面筋:开发2年的程序员如何短期突击面试?跟着这几步去准备,大厂也不远了
  13. Java 以空格分割字符串
  14. 12个最真实的人型机器人,肉眼几乎无法区分,你见过几个?【楚才国科】
  15. java1.7 apk 签名_【keytool jarsigner工具的使用】Android 使用JDK1.7的工具 进行APK文件的签名,以及keystore文件的使用...
  16. Page “xxx“ has not been registered yet.
  17. Unity中的RectTransform
  18. win10子系统linux下cmake编译32位程序
  19. 【鸿蒙操作系统刷机教程】你知道安卓(小米,红米,一加,OPPO,vivo,荣耀,魅族手机)怎么刷华为鸿蒙操作系统(HarmonyOS)刷机包吗?
  20. AWS中EBS相关概念

热门文章

  1. 池化技术及jdk的线程池讲解
  2. faster-rcnn for tensorflow 测试过程
  3. 动态生成的html元素无法调用js函数,在调用js函数之前,如何确保将动态生成的div加载到DOM中?...
  4. Linux源码安装pgadmin4,Linux 服务器部署 PgAdmin 4 Server
  5. java string 练习_JAVA基础练习之String
  6. clocks_per_sec 时间不正确_壁挂炉不用了怎么关?壁挂炉正确的关闭方法
  7. pytorch得到梯度计算结果
  8. jupyter 无法提示代码,报错TypeError: __init__() got an unexpected keyword argument ‘column‘
  9. linux配置utf-8环境
  10. java 同步 实例_Java 1.4同步:仅允许方法的一个实例运行(非...