vlambda博客
学习文章列表

【R语言学习】003 变量类型,检查更改

第一部分目标:001~011,R的基础操作(基本不涉及数据分析数据流)

第二部分目标:012~020,一点基础的数据分析操作,如数据清理

第三部分目标:020之后,开始学习一些进阶内容


003  变量类型,检查更改


本章目标:

知道数据的类型、基本属性等(这个真的了解就好,后面都会单独细讲。这一节虽然是简介但字数最多)

☆☆转换变量类型

☆☆学会检查变量并且查找有用的信息

☆学会操作用户工作区



一、类

引语

在R中,“最小的”数据类型为向量。所有的变量都一定归属一个类,就像高中时代我们会穿上各自学校的校服。例如数字向量是numeric类,逻辑值向量是logical类。
可以用class函数来找出变量名

> x<-c(TRUE,FALSE)> class(x)[1] "logical"
看到这里有同学可能会和我一样迷惑。老师上课说的mode又是什么?
事实上,所有的变量除了类以外,还有一个内部存储类型(用typeof访问),而“mode”表示“模式”,此外还有一个存储模式“storage.mode”。
通常情况只需要知道class就好
关于数据类型和数据结构,有些参考书将之混为一谈,这里做了一些整理。
类涉及的东西真的太多太杂,这里只介绍像我这种初学者能记住的

1、数据类型

R语言可以处理的数据类型主要有6种:浮点型/数值型(numeric)、整数型(integer)、字符型(character)、复数型(complex)、逻辑型(logical)和原生型(raw)

(1)若输入的数据为一个数字,则数据类型为数值型(numeric),若想数据类型为整数(integer),则需要在所赋值后加“L”。如

> x <- 5> class(x)[1] "numeric"> y <- 5L> class(y)[1] "integer"

(2)复数(包括虚部和实部,且虚部不为0)的数据类型为复数型,如2+i;

逻辑型数据包括两种:TRUE和FALSE;
原生型数据为字节,很少用到,它用于存储二进制数据。
2、数据结构

线性代数里面有:向量、矩阵、行列式等

R语言中的数据结构有7种:标量,向量,矩阵,数组(array),数据框(data frame),因子(factor),列表(list)。(数据框和列表允许多种数据类型)。

【R语言学习】003 变量类型,检查更改

枯了,这个玩意上面被挡住的地方写的是“单元素的向量被称为标量”

这些东西之后都会学到,这里只是简单了解。过多介绍毫无益处反而更乱。上学期学C++的时候就是这样,第二章直接学懵。

3.数据对象的属性

所有对象的数据都有两个属性①class②length(长度)

想要查询对象的这两个属性,用class()  、  length()可以得到

举个例子:

x<-numeric(2)

定义了一个长度为2的数值型数据

用线性代数语言:x是一个二维行向量

长度为对象中所含的元素个数。
length对于向量、矩阵、因子而言,表示它们含有的数据个数
而数据框和列表略有不同。数据框可以认为是由n个数据类型不同的列向量组成的,因此每一列都是数据框的一个元素,其长度为列的个数;列表是由不同的对象聚集而成的,其包含的每一个对象都是它的一个元素,列表的长度指其包含对象的个数。
另:维度属性
维度属性为对象各维度的长度,对象维度为1时,其维数属性的值为空,列表可以认为是元素特殊的向量,因此也是1维的。使用dim()可以查看。
学过线代都知道维度,这个就不解释了吧【R语言学习】003 变量类型,检查更改
eg:
> d <- array(1:12, c(3,2,2))> dim(d)  [1] 3 2 2



二、检查和更改“类”

1、检查

is函数可以检查

eg:

> is.character("cwt")[1] TRUE

使用is函数是为了测试这个对象的类型,我们希望它能返回一个逻辑值TRUE,如果返回的是FALSE,我们就需要对其进行调整。而class函数的使用,是在我们不知道但想知道对象类型的时候。这两者最初目的不同。

在实际操作中,通常采用以下措施来纠正数据类型

if(!is(x,"..."))#...表示数据类型{#这里加入纠正措施}

2、更改

所谓更改,指的就是转型(casting),大部分的is函数都有与之对应的as函数。一般情况下用特定的as函数而非单纯的as函数。(具体见下)

> x<-"123"> as(x,"numeric")[1] 123> #上面是把x从一个字符串变量转型为一个数值型变量> #像这样的as函数就是所谓“单纯的”as函数> > as.numeric(x)[1] 123> #这就是所谓“特定的”as函数

记不太清楚老师上课有没有讲过直接给对象分配一个新的“类”以达到改变其类型的效果

eg:

> x<-"123456"> class(x)<-"numeric"> x[1] 123456> #这里就是给x分配了一个数值类,达到把原先的字符型转变为数值型的效果

做个检查:

> is.numeric(x)[1] TRUE

三、检视变量【R语言学习】003 变量类型,检查更改【R语言学习】003 变量类型,检查更改

为避免误会,将参考书此处的检查变量换为检视变量

【R语言学习】003 变量类型,检查更改这里介绍一个很有用的summary函数

它能为不同的数据类型提供汇总信息

这里用runif生成一些随机数来做个测试

> num<-runif(20)> #runif函数用来生成0到1之间的随机数,> #20表示生成20个这样的数> summary(num) Min. 1st Qu. Median Mean 3rd Qu. Max. 0.02688 0.20550 0.41648 0.42714 0.69348 0.82970 > #Qu表示分位数

在《学习R》《R语言实战》中,介绍到这,接下来会用一些因子型、数据框做演示,显然这些玩意如果没有注解初学者基本看不懂(虽然学到后面就知道这里的例子不难)。本系列将到007左右开始细讲因子型。

这里主要是先记住summary这个函数

其他例子:

首先我们先给几个变量赋值,

> num<-runif(30)> fac<-factor(sample(letters[1:5],30,replace=TRUE))> bool<-sample(c(TRUE,FALSE,NA),30,replace = TRUE)> drf<-data.frame(num,fac,bool)

注释:sample表示随机抽样;30,replace=TRUE表示抽30次,letters[1:5]表示前五个字母abcde。factor表示这里是个因子型向量。多维对象都是通过列来汇总的。

接下来再介绍几个其他函数

head、str、unclass、attributes、View

head函数可以显示多维对象的前6行(如数据框)(关于数据框会在004或者005介绍)

数据框的summary函数像是对每一列单独调用summary

str函数能显示对象的结构(多用于数据框)

unclass显示变量是如何构建的。在下面的例子里面,levels是因子型向量的一个属性(因子型在007会讲)。对它使用unclass会显示它仅仅是个拥有levels的整数向量

attributes函数能显示当前所有对象的属性列表

View(V是大写)能把变量生成一个表格

在Rstudio中的效果见下

以上函数例子详见下面的代码

> summary(num) Min. 1st Qu. Median Mean 3rd Qu. Max. 0.03859 0.23581 0.45436 0.50639 0.76401 0.96125 > summary(fac)a b c d e 8 4 8 6 4 > summary(bool) Mode FALSE TRUE NA's logical 12 15 3 > summary(drf) num fac bool  Min. :0.03859 a:8 Mode :logical  1st Qu.:0.23581 b:4 FALSE:12  Median :0.45436 c:8 TRUE :15  Mean :0.50639 d:6 NA's :3  3rd Qu.:0.76401 e:4  Max. :0.96125 > head(drf) num fac bool1 0.7073118 a FALSE2 0.1830570 a TRUE3 0.2198313 a NA4 0.6306432 e TRUE5 0.2837335 c TRUE6 0.7173090 c TRUE
#head可以仅仅显示多维对象额前几行
> str(num) num [1:30] 0.707 0.183 0.22 0.631 0.284 ...> str(drf)'data.frame': 30 obs. of 3 variables: $ num : num 0.707 0.183 0.22 0.631 0.284 ... $ fac : Factor w/ 5 levels "a","b","c","d",..: 1 1 1 5 3 3 4 2 4 1 ... $ bool: logi FALSE TRUE NA TRUE TRUE TRUE ...> unclass(fac) [1] 1 1 1 5 3 3 4 2 4 1 2 1 4 1 2 3 1 5 3 4 5 3 5 3 4 4 3[28] 3 1 2attr(,"levels")[1] "a" "b" "c" "d" "e"> attributes(fac)$levels[1] "a" "b" "c" "d" "e"
$class[1] "factor"
> View(drf)>


【R语言学习】003 变量类型,检查更改

可以用View(head(drf,50)),查看刚刚定义的数据框变量drf的前50行


四、工作区

用ls函数可以列出现有变量的名称,rm函数用来清除变量和清理区间。

ls能连着名字把结构一起列出。用ls(pattern="...")能找到想要的包含特定字符的变量名

这个了解就好,也挺好记的。

在Rstudio中,如果工作量不是很大,这个功能个人感觉有点鸡肋

用《学习R》课后习题3-3举例子(书上没有附参考答案):

题目:创建一些以蔬菜(英文)命名的变量,列出用户工作区中所有包含字母a的变量

答案如下:

第一步,百度搜索蔬菜英文词汇大全,香瓜honeypeach ,卷心菜cabbage,胡萝卜carrot,

木耳 agarics 豌豆 pea 马铃薯(土豆) potato 洋葱onion

差不多了,

第二步,

> honeypeach<-1> cabbage<-2> pea<-3> onion<-TRUE> agarics<-5> potato<-"brown"> carrot<-"red"> ls() [1] "agarics" "cabbage" "carrot" "honeypeach" [5] "my_fac" "my_fac2" "my_fac3" "myfac6"  [9] "onion" "pea" "potato" "tempstring" #这里我发现上一张工作区命名的变量my_fac留在上面#用rm清除掉#重新来一次> rm(list=ls(pattern = "my"))> honeypeach<-1> cabbage<-2> pea<-3> onion<-TRUE> agarics<-5> potato<-"brown"> carrot<-"red"> ls()[1] "agarics" "cabbage" "carrot" "honeypeach"[5] "onion" "pea" "potato" "tempstring"
#nice!


003就到这里结束,到目前为止,都还没什么难度【R语言学习】003 变量类型,检查更改。当年我们学C++不也是如此吗?从“这东西挺简单”到“背,多分”【R语言学习】003 变量类型,检查更改




***上一期推文我里面附了几个R document的链接,但后来发现这个是无法直接用浏览器打开的(电脑和手机端都不行)。必须要在R自身的编辑器里面输入?加上要询问的内容,才能跳转至浏览器。而在Rstudio中,不会跳转至浏览器,编辑器右下角Help标签栏会自动显示要查询的内容(如下图)(不能像浏览器那样使用翻译功能)。因为一些地方英文看不懂,根据个人感受,还是选择在R自身的编辑器中输入查询指令,在浏览器上阅读,这样一些看不懂的地方也有翻译。非常抱歉,因本人上一次的疏忽而造成各位不良阅读体验。

【R语言学习】003 变量类型,检查更改

为了写这个专栏,我放弃了王者荣耀

可喜可贺,可喜可贺【R语言学习】003 变量类型,检查更改【R语言学习】003 变量类型,检查更改

之所以和老师进度不同,是因为本人二月份已经开始自学这个,看了三四个版本的初级教程,根据自己的感受选择比较容易懂的框架。老师在课堂上讲课毕竟要顾及进度,难免会有一些地方讲不明白或者虽然讲明白了但还没等我们明白就开始讲下面的东西

bilibili等网站上有些人出这类教学视频仿佛是在炫耀自己技术多么高超而非为了教会学习者

先在此立个flag,该系列推文一定会更新到020(之后估计要准备期末)

小说。。。照常佛系更新,想到什么就写什么吧。

明天更新向量、矩阵、数组

往期推荐




欢迎关注淏泧三千

这是个向学习区进军的