R---数据以及数据的结构

(1)常见的数据类型

在R中,常见的数据类型一共有5种:
字符型character,
数值型numeric,
整形integer,
复数型complex,
逻辑型logical

常见数据类型.png

还需要注意的是,如果我们直接输入1,2,3,4...得到的是numeric类型。如果想要输入integer类型,需要输入1L,2L,3L,4L...

Inf表示无穷大,-Inf表示无穷小。
同理1/0表示无穷大,-1/0表示无穷小
如果输入0/0则会得到Nan这样的显示,Nan表示在计算的时候出现错误。
而如果出现Na则表示缺失值。我们可以认为Na包含了NaN。

NaN和Na.png

(2)数据的结构

在R语言中,常见的数据的结构有以下几种:
向量,列表,矩阵,数组,数据框,因子

1、向量

特点:相同类型,序列
如何创建向量?
1、创建初始向量:vector(‘数据类型’,数据个数),例如,我们输入:x<-vector('numeric',10),可以得到如下结果,可以看到x的类型为数值型numeric。

vector的用法.png

2、用vector其实等同于直接用数据类型后面跟数据个数,上面的例子其实就可以写成numeric(10),运行之后可以得到相同的结果:

numeric.png

3、如果需要创建的向量是等差为1的等差数列,如1到20的数列,我们可以直接写成:
1:20

1至20的等差数列.png

4、更多情况下,我们用c()函数用来创建向量,把数据对象连结在一起(concatenate)
例如:
c(1,2)

c(1,2).png

如上图可见,这里的数据类型class显示的是“numeric”,说明c(1,2)生成的向量里面的数据类型是数值型,而非整形integer。如果想要得到整形的向量,我们需要输入:
c(1L,2L)

c(1L,2L).png

如果输入c(TRUE,FALSE,FALSE,TRUE),得到逻辑型向量

c(TRUE,FALSE).png

如果输入c('初中','高中','大学'),得到文本型向量


c(字符).png

注意
就像我们之前提到的,向量里面必须得是相同类型的数据。如果在创建向量的时候,输入了不同类型的数据,R会强制将不同类型的数据转换成相同的数据类型。
例如,输入c(1.7,'a'),最后生成的结果如图,1.7被转成了字符型,我们也可以从class里面看到类型是字符型character。

强制转换1.png

输入c(T,2),最后生成的结果如图,T由逻辑型转成了数值型。

强制转换2.png

输入c("a",T),得到的结果如图所示,T由逻辑型转成了字符型。

强制转换3.png

上面提到的这几种转换,通常都是R强制地悄悄地执行的。如果我们自己想要转换数据类型,则应该应用:
as.numeric/logical/character/complex(向量名)来进行转换。

2、列表

特点:列表和向量相同的地方在于,二者都是序列;不同的地方在于,列表是由不同类型的对象组成的,而向量则由同样类型的数据组成。
写作:list(name1=object1,name2=object2,…)
例如:输入x<-list(1,'a',T,b=c(1+4i,2-3i)),我们可以明显看到list()里面的每个部分类型都不同(数值,字符,逻辑值,向量),输出结果如图:

list输出结果.png
3、矩阵

是一类特殊向量,维度属性。
matrix(数据, nrow = 几行, ncol = 几列, byrow = FALSE/T是否按行排列, dimnames = list(c(行名),c(列名)))
斜体的部分表示可以不写。
例如,我们想要输入1-8,2行,4列,按照行排列,行名为张三、王五,列名为吃喝玩乐。可以得到如下图:
matrix(1:8,2,4,byrow=T,dimnames = list(c('张三','王五'),c('吃','喝','玩','乐')))

矩阵.png

矩阵还有另外一种方法可以创建,用cbind() rbind()创建
例如有x,y两个向量。cbind()是按照列来连接xy(x一列,y一列);rbind是按照行连接xy(x一行,y一行)
注意:如果用rbind()来合并矩阵或者向量或者表格,必须要求二者列名一致

cbind&rbind.png

矩阵还有另外一种方法可以创建,创建一个向量,而后添加维度

通过对向量添加维度来创建矩阵.png

t()表示矩阵的转置

4、数组

array,和matrix最大的区别在于array的维度更多,有三个维度。
我们可以理解为matrix有行、列两个维度;但是array多了一个面板维度(分成几块)。
array(数据,dim=c(几行,几列,几块),dimnames = list(c(行名),c(列名),c(板块名)))
例如:
array(1:12,dim=c(2,3,2),dimnames=list(c('从前','现在'),c('衣','食','行'),c('北京','上海')))
得到如下结果:

array.png
5、数据框

数据框是R的一个重要数据类型,用来存储表格数据。可认为是特殊类型的列表,列表中每个元素(每类)都有同样的长度。每一列可以是不同的类型(矩阵是相同的)。可以通过调用data.matrix()将数据框转化为矩阵。
数据框很像我们在使用SQL的时候来定义表格之后,给表格中的各列赋值的情况。
data.frame(列1=向量,列2=向量)
例如:data.frame(foo=1:4,bar=c(T,T,F,F))

数据框.png

nrow(x)----x有几行
ncol(x)----x有几列

6、因子(factor,gl)

特点:用于创建分类数据,两种类型:有序/无序。
可以写成这样的形式:
factor(c("第一类","第二类","第三类",...),levels=c("第一类","第二类","第三类"),ordered = T)
ordered默认为F。
例如:factor(c("小学","初中","高中","小学"),levels=c("小学","初中","高中"),ordered = T)
得到如下结果:

因子.png

我们如果不对level进行定义,出现如下结果:
此时虽然有比较,但是初中<高中<小学,这样的结果是根据字母发音排序的结果,或许并不是我们想要的,所以如果我们对排序有要求,还是要对levels进行定义。levels=c("第一类","第二类","第三类"),理解为
"第一类"<"第二类"<"第三类"

未对Levels定义.png

我们如果不对ordered进行定义,出现如下结果:
此时为无序数据,无比较。


未定义Ordered.png

我们还有另外一种方法来定义因子:gl
gl(有几类, 循环几次, labels = c("第一类名称", "第二类名称"),ordered=T)

例如:gl(2,4),表示有两个变量(2),每一个循环4次

gl.png

例如:gl(2, 8, labels = c("女", "男"),ordered=T),表示有两个变量,各循环8次,这两个变量分别表示为“女”和“男”,排序。
注意,这里和上一个例子一样,本来应该是给出两个变量用1和2表示,labels相当于给1和2加了“女”和“男”的标签。所以排序之后显示“女”<“男”,其背后真实的情况是1<2 。

gl2.png

例如: gl(2, 8, labels = c("女", "男"),ordered=T,length=32),在以上的基础上,规定一共有32个对象

gl3.png

结语

通过我们以上的论述,我们知道了5种数据类型和几种常见的对象形态。
这些是R中非常基础但是十分重要的内容,需要多看几遍才能记得更清楚。

R对象总结.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容