第二天,继续学习R语言。
2.创建数据集
2.1数据集
数据构成的一个矩形数组,行表示观测,列表示变量。
2.2数据结构
标量:只含有一个元素的向量。
2.2.1向量
a<-c("k","j","h","a","c")
a[3] #访问向量中的第三个元素
a[c(1,3,5)]
a[2:5]
冒号的用法a<-c(2:6)等价于 a<-c(2,3,4,5,6)
2.2.2矩阵
矩阵:一个二维数组,可通过matrix()创建矩阵
mymatrix<-matrix(vetor,nrow = number_of_row,ncol = number_of_colums,
byrow = logical_value,dimnames = list(rownames,colnames))
将一个向量(第一个参数vector)转换为矩阵,
nrow指定行数,
ncol指定列数,
byrow TRUE或FALSE确定是按行排列还是按列排列(默认按列),dimnames指定行名和列名,行名和列名分别用向量表示。
y<-matrix(1:20,nrow = 5,ncol = 4) #创建一个5*4的矩阵
y
cells<-c(1,25,24,13)
rnames<-c("R1","R2")
cnames<-c("C1","C2")
mymatrix<-matrix(cells,nrow = 2,ncol = 2,byrow = TRUE,dimnames = list(rnames,cnames))
mymatrix
矩阵中元素的引用
x[2,]第二行
x[,2]第二列
x[1,4]第一行第四列元素
x[1,c(4,5)]第一行,第四第五个元素
维度超过2时,使用数组。有多重模式的数据时,使用数据框~
2.2.3数组
用array函数创建:
myarray<-array(vector,dimensions,dimnames)
其中第二个参数dimensions是纬度,是一个数值型向量;
第三个参数dimnames是各维的名字,是个列表.
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
数组是矩阵的推广,其中的元素只能是一种模式。
上面的例子中Z[1,2,3]为15.
2.2.4数据框
数据框是R中最常处理的数据结构
mydataframe<-data.frame(col1,col2,col3);
每一列的名称可由names函数指定用以下两个方法进行;
比如:
names(study) <- c("wei","hei","gen")#修改列名
row.names(study)<-c("Mary","Alice","Bob","Judy")#修改行名
patientID<-c(1,2,3,4)
age<-c(25,34,28,52)
diabetes<-c("Type1","Type2","Type1","Type1")
status<-c("Poor","Improved","Excellent","Poor")
patientdata<-data.frame(patientID,age,diabetes,status)
patientdata
class(patientdata) #产看patientdata的类型
patientdata[1:2] #选了数据框第一列和第二列;
patientdata[1,2] #选的是第一行第二列的元素;
patientdata[1:2,] #选的是第一行第二行(注意没有逗号的时候默认是选择的列)
patientdata[c("diabetes","status")] #使用列名来选取元素
patientdata$age #选取数据框patientdata中age这一列
table()函数生成两个变量的列联表(即符合条件的个体数)
table(patientdata$diabetes,patientdata$status)
以上就是得到符合两个条件交叉的geti数量
attach()函数
attach()可将数据框添加到R的搜索路径中。R在遇到一个变量名后,将检查搜索
路径中的数据框,以定位到这个变量。
举个栗子:
summary(mtcars$mpg)#生成四分位数及均值
plot(mtcars$mpg,mtcars$disp)
plot(mtcars$mpg,mtcars$wt)#等价于下列代码:
attach(mtcars)
summary(mpg)
plot(mpg,disp)
detach(mtcars) #注意用完后别忘再把变量从搜索路径中请出来
注意如果数据框中的变量与数据框外的变量同名,则attach(dataframe)会把数据
框外的变量留下来放在数据框中,即原有对象优先(而不是覆盖)!!!
上面的例子还可以用with()函数进行改写:
with(mtcars,{
summary(mpg,disp,wt)
plot(mpg,disp)
plot(mpg,wt)
})
以上模式是with(dataset,{statements})
注大括号内赋值的变量,仅在大括号内有效。若要让大括号内赋值的变量在大括号外有效的话,需要使用<<-这个符号赋值。
指定实例标识符
在创建数据框时指定:
patientdata<-data.frame(patientID,age,diabetes,status,row.names = patientID)
这里一定是row.names!!!
2.2.5因子
其实就是定类和定序类型的变量(也就是分类变量)
函数factor()以一个整数向量的形式存储类别值,取值范围是【1-k】,k是变量中唯一值的个数。
举个例子
diabetes<-c("Type1","Type2","Type1","Type1")
diabetes<-factor(diabetes)
将此向量存储为(1,2,1,1),并在内部关联1=Type1,2=Type2(复制的顺序是根据字母顺序定的)
有序的变量的话,需要加order=TRUE.
若是想要按照自己的顺序排列,需要使用levels选项:
status<-factor(status,ordered = TRUE,levels=c("Poor","Improved","Excellent"))
2.2.6列表
列表是一些对象的有序集合,可以整合若干向量、矩阵、数据框,甚至其他列表的组合。
mylist<-list(object1,object2)
2.3数据的输入
2.3.1键盘输入数据
创建空的数据框
mydata<-data.frame(age=numeric(0),gender=character(0),weight=numeric(0))
编辑数据
mydata<-edit(mydata)
fix(mydata) #以上两句等效
2.3.2从带分隔符的文本文件导入数据
mydataframe<-read.table("file",header = logical_value,sep = "delimiter",row.names = "name")
header 表示文件是否在第一行包含了变量名的逻辑型变量
row.names用于指定行名,默认情况下,字符型变量将被转换为因子。
设置选项stringAsFactor=FALSE即可停止转换!!!
函数file(),gzfile(),unz(),url()可作为文件名参数使用~