R语言实战(创建数据集)
创建数据集
什么叫数据集?数据集通常是由数据构成的矩形数组,行表示观测,列表示变量 如下面的病例数据集
patientID age diabetes status
1 1 25 Type1 Poor
2 2 34 Type2 Improved
3 3 28 Type1 Excellent
4 4 52 Type1 Poor
在R语言中用于储存数据的结构有标量,向量,数组,数据框和列表。可以用来处理的数据类型有数值型,字符型,逻辑型(FALSE/TRUE),复数型,原生型(字节)。*
数据结构
向量向量用于储存数值型,字符型或逻辑型数据的一维数组。用c()创建向量,如
<-就是等号的意思
a<-c(1,2,3,4,5,6)
b<-c("one","two","three")
c<-c(TRUE,TRUE,FALSE,FALSE)
标量是只含有一个元素的向量如
f<-3
g<-"us"
h<-true
通过[ ]来访问向量中的元素 注意在r语言中第一个元素的索引为1
> a<-c("k","j","h","g","f","f")
> a[3]
[1] "h"
> a[c(1,3,5)]
[1] "k" "h" "f"
> a[2:6]
[1] "j" "h" "g" "f" "f"
矩阵
创建矩阵
创建矩阵一般通过matrix()函数,默认情况下是竖着填充元素,如下面这个例子,将1到20竖着排入矩阵,nrow=5代表矩阵有5行,当然呢以后可以只定义nrow或ncol中的一个
> 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
这里我设定了byrow=TRUE,即将元素按行进行填充,然后用dimnames设定行名和列名。
> 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))
> mymatrix
c1 c2
r1 1 26
r2 24 68
矩阵下标的使用
用[ ]进行截取,注意逗号,如果直取第二列的话[ , 2 ],行的话同理,如果要选择第一行第2列到第五列的元素可以用[1,c(2:5)]
> x<-matrix(1:10,nrow = 2)
> x
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9
[2,] 2 4 6 8 10
> x[2,]
[1] 2 4 6 8 10
> x[,2]
[1] 3 4
> x[2,2]
[1] 4
> x[1,c(2:5)]
[1] 3 5 7 9
数组
数组的创建函数为array,注意c(2,3,4)表示,创建4个矩形矩阵,每个矩阵2行3列
> dim1<-c("a1","a2")
> dim2<-c("b1","b2","b3")
> dim3<-c("c1","c2","c3","c4")
> z<-array(1:24,c(2,3,4),dimnames = list(dim1,dim2,dim3))
> 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
访问数组
> v1 <- c(5,9,3)
> v2 <- c(10,11,12,13,14,15)
> z<-array(c(v1,v2),dim = c(3,3,2))
> z
, , 1
[,1] [,2] [,3]
[1,] 5 10 13
[2,] 9 11 14
[3,] 3 12 15
, , 2
[,1] [,2] [,3]
[1,] 5 10 13
[2,] 9 11 14
[3,] 3 12 15
> z[,3,2]
[1] 13 14 15
#提取第二个矩阵中的第三列
数据框不同的列可以包含不同模式(数值型 字符型)的数据。创建函数data.frame()
> manager<-c(1,2,3,4,5)
> data<-c('10/24/08','10/28/08','10/1/08','10/12/08','5/1/09')
> country<-c('US','US','UK','UK','UK')
> gender<-c('M','F','F','M','F')
> age<-c(32,45,25,39,99)
> q1<-c(5,3,3,3,2)
> q2<-c(4,5,5,3,2)
> q3<-c(5,2,5,4,1)
> q4<-c(5,5,5,NA,2)
> q5<-c(5,5,2,NA,1)
> leadership<-data.frame(manager,data,country,gender,age,q1,q2,q3,q4,q5,stringsAsFactors = FALSE)
> leadership
manager data country gender age q1 q2 q3 q4 q5
1 1 10/24/08 US M 32 5 4 5 5 5
2 2 10/28/08 US F 45 3 5 2 5 5
3 3 10/1/08 UK F 25 3 5 5 5 2
4 4 10/12/08 UK M 39 3 3 4 NA NA
5 5 5/1/09 UK F 99 2 2 1 2 1
选取数据框中的元素 可以通过$进行,如
> leadership$age
[1] 32 45 25 39 99
可以通过[ ],如
> leadership[1:2]
manager data
1 1 10/24/08
2 2 10/28/08
3 3 10/1/08
4 4 10/12/08
5 5 5/1/09
> leadership[c("manager","data")]
manager data
1 1 10/24/08
2 2 10/28/08
3 3 10/1/08
4 4 10/12/08
5 5 5/1/09
在截取的过程中常常使用attach(),with()函数来简化代码,
> with(leadership,{
+ newdatas<<-leadership[gender=="F" & age>30,]
+ })
> newdatas
manager data country gender age q1 q2 q3 q4 q5
2 2 10/28/08 US F 45 3 5 2 5 5
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),而因子在整个计算过程中不再作为数值,而是一个"符号"而已
> x<-c(4, 6 ,4 ,6 ,6 ,6 ,6 ,3 ,1 ,4 ,5, 3 ,1 ,2 ,6, 4 ,5 ,3 ,6, 2)
> x
[1] 4 6 4 6 6 6 6 3 1 4 5 3 1 2 6 4 5 3 6 2
> fact<-factor(x)
> fact#有六个水平:1 2 3 4 5 6
[1] 4 6 4 6 6 6 6 3 1 4 5 3 1 2 6 4 5 3 6 2
Levels: 1 2 3 4 5 6
指定因子水平的名称
> x<-c(4, 6 ,4 ,6 ,6 ,6 ,6 ,3 ,1 ,4 ,5, 3 ,1 ,2 ,6, 4 ,5 ,3 ,6, 2)
> fact<-factor(x,label=c("A","B","C","D","E","F"))
> fact
[1] D F D F F F F C A D E C A B F D E C F B
Levels: A B C D E F
定义有序的水平
> x<-c(4, 6 ,4 ,6 ,6 ,6 ,6 ,3 ,1 ,4 ,5, 3 ,1 ,2 ,6, 4 ,5 ,3 ,6, 2)
> fact<-factor(x,label=c("A","B","C","D","E","F"),order=T)
> fact
[1] D F D F F F F C A D E C A B F D E C F B
Levels: A < B < C < D < E < F
列表
某个列表中可能是若干向量,矩阵,数据框或者是其他列表的组合
> g<-"my first list"
> h<-c(25,26,18,39)
> j<-matrix(1:10,nrow=5)
> k<-c("one","two","three")
> mylist<-list(title=g,ages=h,j,k)
> 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 39
> mylist[["ages"]]
[1] 25 26 18 39`
数据的读入
mydata<-read.table(file,options)
常用options header 是否在第一行包含逻辑性变量,一般header=TRUE sep 分开数值的分隔符 如sep="\t"以制表符进行分开
注意读入数据之前先用getwd()查看当前工作路径
> getwd()
[1] "C:/Users/Administrator/Documents"
然后再用setwd()切换工作路径,要切换到与所要导入的数据相同的目录下
> setwd("..")
> getwd()
[1] "C:/Users/Administrator"
当然呢也可以直接给定文件的绝对路径
欢迎来自家的小屋,我也刚开始学习R语言,希望大家可以一起学习呀~~