vlambda博客
学习文章列表

R语言实战(创建数据集)

创建数据集

什么叫数据集?数据集通常是由数据构成的矩形数组,行表示观测,列表示变量 如下面的病例数据集

 
   
   
 
  1. patientID age diabetes status

  2. 1 1 25 Type1 Poor

  3. 2 2 34 Type2 Improved

  4. 3 3 28 Type1 Excellent

  5. 4 4 52 Type1 Poor

在R语言中用于储存数据的结构有标量,向量,数组,数据框和列表。可以用来处理的数据类型有数值型,字符型,逻辑型(FALSE/TRUE),复数型,原生型(字节)。*

数据结构

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

 
   
   
 
  1. <-就是等号的意思

  2. a<-c(1,2,3,4,5,6)

  3. b<-c("one","two","three")

  4. c<-c(TRUE,TRUE,FALSE,FALSE)

标量是只含有一个元素的向量如

 
   
   
 
  1. f<-3

  2. g<-"us"

  3. h<-true

通过[ ]来访问向量中的元素 注意在r语言中第一个元素的索引为1

 
   
   
 
  1. > a<-c("k","j","h","g","f","f")

  2. > a[3]

  3. [1] "h"

  4. > a[c(1,3,5)]

  5. [1] "k" "h" "f"

  6. > a[2:6]

  7. [1] "j" "h" "g" "f" "f"

矩阵

创建矩阵

创建矩阵一般通过matrix()函数,默认情况下是竖着填充元素,如下面这个例子,将1到20竖着排入矩阵,nrow=5代表矩阵有5行,当然呢以后可以只定义nrow或ncol中的一个

 
   
   
 
  1. > y<-matrix(1:20,nrow = 5,ncol=4)

  2. > y

  3. [,1] [,2] [,3] [,4]

  4. [1,] 1 6 11 16

  5. [2,] 2 7 12 17

  6. [3,] 3 8 13 18

  7. [4,] 4 9 14 19

  8. [5,] 5 10 15 20

这里我设定了byrow=TRUE,即将元素按行进行填充,然后用dimnames设定行名和列名。

 
   
   
 
  1. > cells<-c(1,26,24,68)

  2. > rnames<-c("r1","r2")

  3. > cnames<-c("c1","c2")

  4. > mymatrix<-matrix(cells,nrow = 2,ncol=2,byrow = TRUE,dimnames=list(rnames,cnames))

  5. > mymatrix

  6. c1 c2

  7. r1 1 26

  8. r2 24 68

矩阵下标的使用

用[ ]进行截取,注意逗号,如果直取第二列的话[ , 2 ],行的话同理,如果要选择第一行第2列到第五列的元素可以用[1,c(2:5)]

 
   
   
 
  1. > x<-matrix(1:10,nrow = 2)

  2. > x

  3. [,1] [,2] [,3] [,4] [,5]

  4. [1,] 1 3 5 7 9

  5. [2,] 2 4 6 8 10

  6. > x[2,]

  7. [1] 2 4 6 8 10

  8. > x[,2]

  9. [1] 3 4

  10. > x[2,2]

  11. [1] 4

  12. > x[1,c(2:5)]

  13. [1] 3 5 7 9

数组

数组的创建函数为array,注意c(2,3,4)表示,创建4个矩形矩阵,每个矩阵2行3列

 
   
   
 
  1. > dim1<-c("a1","a2")

  2. > dim2<-c("b1","b2","b3")

  3. > dim3<-c("c1","c2","c3","c4")

  4. > z<-array(1:24,c(2,3,4),dimnames = list(dim1,dim2,dim3))

  5. > z

  6. , , c1


  7. b1 b2 b3

  8. a1 1 3 5

  9. a2 2 4 6


  10. , , c2


  11. b1 b2 b3

  12. a1 7 9 11

  13. a2 8 10 12


  14. , , c3


  15. b1 b2 b3

  16. a1 13 15 17

  17. a2 14 16 18


  18. , , c4


  19. b1 b2 b3

  20. a1 19 21 23

  21. a2 20 22 24

访问数组

 
   
   
 
  1. > v1 <- c(5,9,3)

  2. > v2 <- c(10,11,12,13,14,15)

  3. > z<-array(c(v1,v2),dim = c(3,3,2))

  4. > z

  5. , , 1


  6. [,1] [,2] [,3]

  7. [1,] 5 10 13

  8. [2,] 9 11 14

  9. [3,] 3 12 15


  10. , , 2


  11. [,1] [,2] [,3]

  12. [1,] 5 10 13

  13. [2,] 9 11 14

  14. [3,] 3 12 15

  15. > z[,3,2]

  16. [1] 13 14 15

  17. #提取第二个矩阵中的第三列

数据框不同的列可以包含不同模式(数值型 字符型)的数据。创建函数data.frame()

 
   
   
 
  1. > manager<-c(1,2,3,4,5)

  2. > data<-c('10/24/08','10/28/08','10/1/08','10/12/08','5/1/09')

  3. > country<-c('US','US','UK','UK','UK')

  4. > gender<-c('M','F','F','M','F')

  5. > age<-c(32,45,25,39,99)

  6. > q1<-c(5,3,3,3,2)

  7. > q2<-c(4,5,5,3,2)

  8. > q3<-c(5,2,5,4,1)

  9. > q4<-c(5,5,5,NA,2)

  10. > q5<-c(5,5,2,NA,1)

  11. > leadership<-data.frame(manager,data,country,gender,age,q1,q2,q3,q4,q5,stringsAsFactors = FALSE)

  12. > leadership

  13. manager data country gender age q1 q2 q3 q4 q5

  14. 1 1 10/24/08 US M 32 5 4 5 5 5

  15. 2 2 10/28/08 US F 45 3 5 2 5 5

  16. 3 3 10/1/08 UK F 25 3 5 5 5 2

  17. 4 4 10/12/08 UK M 39 3 3 4 NA NA

  18. 5 5 5/1/09 UK F 99 2 2 1 2 1

选取数据框中的元素 可以通过$进行,如

 
   
   
 
  1. > leadership$age

  2. [1] 32 45 25 39 99

可以通过[ ],如

 
   
   
 
  1. > leadership[1:2]

  2. manager data

  3. 1 1 10/24/08

  4. 2 2 10/28/08

  5. 3 3 10/1/08

  6. 4 4 10/12/08

  7. 5 5 5/1/09


  8. > leadership[c("manager","data")]

  9. manager data

  10. 1 1 10/24/08

  11. 2 2 10/28/08

  12. 3 3 10/1/08

  13. 4 4 10/12/08

  14. 5 5 5/1/09

在截取的过程中常常使用attach(),with()函数来简化代码,

 
   
   
 
  1. > with(leadership,{

  2. + newdatas<<-leadership[gender=="F" & age>30,]

  3. + })

  4. > newdatas

  5. manager data country gender age q1 q2 q3 q4 q5

  6. 2 2 10/28/08 US F 45 3 5 2 5 5

  7. 5 5 5/1/09 UK F 99 2 2 1 2 1

在使用with的过程中注意<<-,可以继续调用with函数内部的newdatas如果使用<-那么跑出with函数后,将不能继续使用newdatas 这里使用with的话,可以直接使用gender,而不用使用leadershi$gender

因子

可以通过factor()函数创建因子,factor()函数的第一个参数必须是字符向量,通过levels参数显式设置因子水平,

变量可以分为名义型,有序型,连续型变量。名义型是没有顺序之分的类别 有序型表示一种顺序关系 连续型可以呈现某个范围内的任意值 名义型和有序型变量在R中称为因子 注意:如果把数字作为因子,那么在导入数据之后,需要将向量转换为因子(factor),而因子在整个计算过程中不再作为数值,而是一个"符号"而已

 
   
   
 
  1. > x<-c(4, 6 ,4 ,6 ,6 ,6 ,6 ,3 ,1 ,4 ,5, 3 ,1 ,2 ,6, 4 ,5 ,3 ,6, 2)

  2. > x

  3. [1] 4 6 4 6 6 6 6 3 1 4 5 3 1 2 6 4 5 3 6 2

  4. > fact<-factor(x)

  5. > fact#有六个水平:1 2 3 4 5 6

  6. [1] 4 6 4 6 6 6 6 3 1 4 5 3 1 2 6 4 5 3 6 2

  7. Levels: 1 2 3 4 5 6

指定因子水平的名称

 
   
   
 
  1. > x<-c(4, 6 ,4 ,6 ,6 ,6 ,6 ,3 ,1 ,4 ,5, 3 ,1 ,2 ,6, 4 ,5 ,3 ,6, 2)

  2. > fact<-factor(x,label=c("A","B","C","D","E","F"))

  3. > fact

  4. [1] D F D F F F F C A D E C A B F D E C F B

  5. Levels: A B C D E F

定义有序的水平

 
   
   
 
  1. > x<-c(4, 6 ,4 ,6 ,6 ,6 ,6 ,3 ,1 ,4 ,5, 3 ,1 ,2 ,6, 4 ,5 ,3 ,6, 2)

  2. > fact<-factor(x,label=c("A","B","C","D","E","F"),order=T)

  3. > fact

  4. [1] D F D F F F F C A D E C A B F D E C F B

  5. Levels: A < B < C < D < E < F

列表

某个列表中可能是若干向量,矩阵,数据框或者是其他列表的组合

 
   
   
 
  1. > g<-"my first list"

  2. > h<-c(25,26,18,39)

  3. > j<-matrix(1:10,nrow=5)

  4. > k<-c("one","two","three")

  5. > mylist<-list(title=g,ages=h,j,k)

  6. > mylist

  7. $title

  8. [1] "my first list"


  9. $ages

  10. [1] 25 26 18 39


  11. [[3]]

  12. [,1] [,2]

  13. [1,] 1 6

  14. [2,] 2 7

  15. [3,] 3 8

  16. [4,] 4 9

  17. [5,] 5 10


  18. [[4]]

  19. [1] "one" "two" "three"

使用双重方括号来访问列表中的元素

 
   
   
 
  1. > mylist[[2]]

  2. [1] 25 26 18 39


  3. > mylist[["ages"]]

  4. [1] 25 26 18 39`

数据的读入

 
   
   
 
  1. mydata<-read.table(file,options)

常用options header 是否在第一行包含逻辑性变量,一般header=TRUE sep 分开数值的分隔符 如sep="\t"以制表符进行分开

注意读入数据之前先用getwd()查看当前工作路径

 
   
   
 
  1. > getwd()

  2. [1] "C:/Users/Administrator/Documents"

然后再用setwd()切换工作路径,要切换到与所要导入的数据相同的目录下

 
   
   
 
  1. > setwd("..")

  2. > getwd()

  3. [1] "C:/Users/Administrator"

当然呢也可以直接给定文件的绝对路径

欢迎来自家的小屋,我也刚开始学习R语言,希望大家可以一起学习呀~~