创建数据集
进行数据操作的第一步就是创建数据集,也就是我们通常认知中的输入数据的操作。数据集通常是由数据构成的一个矩形数组,用行来表示观测,用列来表示变量。
数据结构
R语言中有许多用于存储数据的对象类型:标量、向量、矩阵、数组、数据框、列表等。
下面来展示一下上述数据类型的输入形式:
创建标量:
标量指的是直含有一个元素的向量。
a<-1b<-"one"c<-TRUE
创建向量:
R语言中用函数c()来创建向量的输入,向量输入的类型可以包含数值型、字符型(需要加引号)、布尔型(注意TRUE/FALSE都需要大写)
Vector_number<-c(1,2,3,4,5) Vector_str<-c("one","two","three") Vector_bool<-c(TRUE,FALSE,TRUE,TRUE)
对于数值序列可以采用下面的方法来建立一个向量(例如生成1,2,3,4,5):
Vector<-c(1:5)
如果想要查看某个向量我们只需要输入某个向量的名称即可,若要查看某一项可以使用Vector[c(1,3)]的形式用于查看第一、三项([1]开头的行是输出结果):
>Vector_str[c(1,3)] [1] "one""three">Vector_str[1] "one""two""three">Vector_number[1] 12345>Vector_bool[1] TRUEFALSETRUETRUE
创建矩阵:
创建矩阵的一般使用格式如下:
matrix<-matrix(vector,nrow=number_of_rows,ncol=number_of_columns,byrow=logical_value,dimnames=list(char_vector_rownames,char_vector_colnames))
其中vector包含了矩阵的元素,nrow和ncol用以制定行和列的维数,dimnames包含了可选的以字符型向量表示的行名和列名,选项byrow表明了矩阵应当按行填充(byrow=TRUE)还是按列填充(byrow=FALSE),默认按列填充。
Matrix<-matrix(1:20,nrow=4,ncol=5) Mymatrix1<-matrix(1:4,nrow=2,ncol=2,byrow=TRUE,dimname=list(c("r1","r2"),c("c1","c2"))) Mymatrix2<-matrix(1:4,nrow=2,ncol=2,byrow=FALSE,dimname=list(c("r1","r2"),c("c1","c2")))
输出矩阵:
>Matrix [,1] [,2] [,3] [,4] [,5] [1,] 1591317[2,] 26101418[3,] 37111519[4,] 48121620>Mymatrix1c1c2r112r234>Mymatrix2c1c2r113r224
创建数组:
数组的输入形式和矩阵是类似的,但是数组支持了更高维度的数据,数组的一般表示形式如下:
array<-array(vector,dimensions,dimnames)
其中Vector是数组中的数据,dimensions是一个数值型向量,给出了各个维度下标的最大值,dimnames和在矩阵中的用法相同,实例如下:
Array<-array(1:18,c(3,2,3),dimnames=list(dim1,dim2,dim3))
输出如下:
>Array, , C1B1B2A114A225A336, , C2B1B2A1710A2811A3912, , C3B1B2A11316A21417A31518
创建数据框:
由于不同的列可以包含不同的数据类型,数据框也就被应用的更加广泛,给出创建数据框的一般形式:
mydata<-data.frame(col1,col2,col3,...)
列向量中可以包含任何的数据类型,实例如下:
ID<-c(1,2,3,4) name<-c("James","Durant","Curry","Harden") number<-c(23,35,30,13) patientdata<-data.frame(ID,name,number)
输出如下:
>patientdataIDnamenumber11James2322Durant3533Curry3044Harden13
选取数据框中的元素:
>patientdataIDnamenumber11James2322Durant3533Curry3044Harden13>patientdata[1:2] IDname11James22Durant33Curry44Harden>patientdata[c("name","number")] namenumber1James232Durant353Curry304Harden13>patientdata$name[1] JamesDurantCurryHardenLevels:CurryDurantHardenJames
$用来选取一个给定数据框中的某个特定变量。
创建列表:
列表(list)是R语言数据类型中最复杂的一种,通俗的说列表就是一些对象(或成分component)的有序集合,在创建矩阵和数组时,我们输入dimnames属性时已经用到了列表,下面通过实例来展示一下列表的操作。
>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] 25261839[[3]] [,1] [,2] [1,] 16[2,] 27[3,] 38[4,] 49[5,] 510[[4]] [1] "one""two""three"
数据的输入
键盘输入数据:
在R中edit()函数会调用出一个允许手动输入数据的文本编辑器,步骤如下:
(1)创建一个空数据框(或矩阵),其中变量名和变量的模式需要与理想中的最终数据集保持一致。
(2)针对这个数据对象调用文本编辑器,输入你的数据,并将结果保存回次数据对象中。
实例如下(执行edit()函数后会出现下面所示的数据编辑器):
>mydata<-data.frame(age=numeric(0),gender=character(0),weight=numeric(0)) >edit(mydata)
其中语句edit(mydata)可以等价于fix(mydata)。
从带分隔符的文本文件导入数据:
我们可以使用函数read.table()从带分隔符的文本文件中导入数据,语法如下:
mydataframe<-read.table(file,header=logical_value,sep="delimiter",row.names="name")
其中file是一个带分隔符的ASCII文本文件,header是一个表明首行是否包含了变量名的逻辑值(TRUE/FALSE),sep是用来指定分隔数据的分隔符,row.name是一个可选参数,用以指定一个或多个表示行标识符的变量。实例如下:
grades<-read.table("studentgrades.csv",header=TRUE,sep=",",row.names="STUDENTID")
导入Excel数据:
导入Excel数据的一种方法是,将其导出为一个逗号分隔符的文件(csv),并使用上一节中提到的方法将其导入R中。
还有一种方法需要我们来使用工具包进行导入:
install.packages("RODBC") library(RODBC) channel<-odbcConnectExcel("myfile.xls") mydataframe<-sqlFetch(channel,"mysheet") odbcClose(channel)
这里的myfile.xls就是一个Excel文件,mysheet是要从这个工作簿中读取工作表的名称,channel是一个由odbcConnectExcel()连接的对象,mydataframe是返回的数据框。
以上就是对一些基本的数据进行输入的过程,后续会继续更新其他数据的导入方式。