Data Frame一般被译为数据框,感觉就像是R中的表,由行和列组成,与Matrix不同的是,每个列可以是不同的数据类型,而Matrix是必须相同的。Data Frame每一列有列名,每一行也可以指定行名。如果不指定行名,那么就是从1开始自增的Sequence来标识每一行。所以说数据框在R语言中可是个好东西,R中它是用的非常频繁也是非常有用的数据集合。
创建数据集
> a1 <- c(1:3) > a2 <- c('a','b','v') > dat <- data.frame(a1,a2) > dat a1 a2 1 1 a 2 2 b 3 3 v
这样就定义了一个以a1、a2为两列的数据框,第一列是数值型,第二列是字符型。
当然了,后面会讲到,读取结构化数据文件的话,比如csv、空格或者逗号分隔的txt文件,我们可以直接用相应的read.csv或者是read.table直接读进来成为数据框。
访问元素
访问第一行:
> dat[1,] a1 a2 1 1 a
访问第一列
> dat[,1] [1] 1 2 3
或者是直接引用列名
> dat$a1 [1] 1 2 3
前面讲过,可以直接用attach(dat)绑定dat,就不需要数据名前缀了,这里还是再复习一遍吧!
>attach(dat) > a1 [1] 1 2 3
使用完后解除绑定,及时释放资源,这时候就不能直接用列名了。
添加新列
比如添加一个名为a3的列
> dat$a3 <- c('f','m','f') > dat a1 a2 a3 1 1 a f 2 2 b m 3 3 v f
查询
查询某一个列变量满足某一个条件或者找指定值用的很多,用which()函数。
查询dat中a3列取值为'm'的行,我们可以这样
> dat[which(dat$a3 == 'm'),] a1 a2 a3 2 2 b m
前面讲过,dat[2,]表示dat的第二行,这里which(dat$a3 == 'm')表示满足条件的行,可以有多个,再加上',',构成完整的满足dat中a3列取值为'm'的行的查询语句,这个用的很频繁,需要重点掌握。
连接、合并
这是R语言数据分析基本功。我一般在做R语言网络爬虫时需要把每一张网页数据整理成数据框,然后循环拼接、合并,最后保存到本地。一般用merge()函数。
再创建一个数据框dat1
> dat1 <- data.frame(c('q1','q2','q3'),c(1,4,5)) > dat1 c..q1....q2....q3.. c.4.6. 1 q1 4 2 q2 5 3 q3 6 > names(dat1) <- c('a4','a5') > dat1 a4 a5 1 q1 1 2 q2 4 3 q3 5
找出dat的a1属性值与dat1的a5属性等值的所有行进行按列连接,组成新行。
> dat2 <- merge(dat,dat1,by.x = 'a1',by.y = 'a5') > dat2 a1 a2 a3 a4 1 1 a f q1
学过数据库的人知道,这相当于数据框库操作的迪卡儿等值连接。
关于R的数据框就到这里!
文章评论