R语言入门与实践笔记(第四章)

Python08

R语言入门与实践笔记(第四章),第1张

在R中有 6中索引编写方式 ,包括 正整数、负整数、零、空格、逻辑值、名称

与正整数索引相反,它的含义是 不包含 负整数索引所对应的元素。

说实话,零索引并没有多大用处。这里就不介绍了

代表选取该索引位置所代表维度的所有元素。

当索引提供一个包含TRUE和FALSE逻辑值的向量时,R会匹配索引值为TRUE的元素。 此索引方式非常重要

编写一个可以返回第一行所有元素的函数

问题:这样每次发牌都是黑桃K,所以我们要在每次发完牌后进行洗牌,然后再发,现在写一个洗牌的函数

下面写一个输入进去deck输出一个洗牌后的数据框的函数

$ 可以提取数据框或列表对象中的值。

列表提取元素

掌握R语言的索引,最基本操作为 写出对象名字,并在随后中括号里写出对应的索引即可 。若对象是一维的,如向量,只需要提供一个位置索引;若对象是二维的,如数据框,则提供两个位置索引,中间用逗号隔开。n维则用n个索引。另外数据框和列表还可用 $ 来索引。

矩阵是可以看作一种特殊的向量的,它比向量多了两个附加属性,行数和列数,因此让它的复杂程度获得了提高。

向量作为R中的一种非常基础的数据类型,大家通过过去的学习一定已经彻底的掌握了。但是,这个世界上的数据是复杂多变的,我们只使用向量是无法表示更加复杂的数据情况。

我们在线性代数课上学过一种数学概念,矩阵。这个概念在为了统计学家开发的R语言中同样适用,并且只需要在基础环境中,我们可以具有很多对矩阵的操作方法。

( 由于R其实处理数据框较多,矩阵并不会讲很多的东西,如果非要使用矩阵,我其实还是更推荐去隔壁Python学习np和scipy )

任何数据类型学习的开始都是如何得到它,也就是如何创建它。矩阵也不例外,我们首要的 创建方式就是直接使用matrix函数进行创建 。而且其实说是创建矩阵,我们其实是在把一个向量转化为矩阵,

上面就是最基本的创建矩阵的方法了。我们 需要给matrix一个向量 (其实矩阵也可以,不过就会让你产生一些奇奇怪怪的误导,后面讲解了矩阵转向量的时候你就明白了),这个向量的内容就会成为创建的矩阵的内容。

然后跟着需要 指定你想创建的行数或者列数 ,这两个只需要指定其一即可,R会给我们计算另一个数字是几的,这样,我们就创建好了一个矩阵。

但是我们可以发现一个问题,我们创 建的矩阵是竖着一排排放的,这个叫做,****列优先原则 ,我们也可以通过指定参数 byrow,来让矩阵变成行优先

这就是行优先矩阵了,存储的内容都是一样的,就是行列优先顺序不同。

到这里你可能就会问了,R是不是只能创建方阵呢,普通的矩阵能不能创建呢?那当然可以了

我本人是习惯列优先进行存储的,所以我一般不指定byrow参数。

任何一种数据类型,我们对它最优先的操作学习,都是索引操作。任何一种结构的数据,我们存储它的目的都是为了使用,所以学习如果取到它的值,是非常重要的事情。

对矩阵的基本索引方式和向量非常相似,如果不了解向量的直接索引,布尔索引和连续索引,请看

由于有了上面的基础,所以我们先索引点简单的,然后做两个不一样的案例。矩阵和向量最大的区别再与矩阵具有两个维度,索引的时候需要两个位置

这里停一下,我们取第一行的所有列就已经是不同了,要注意, 当我们想取某一行的所有列,或者某列的所有行,或者当你想取所有的时候,把位置空出来 ,R就会自动给你取到所有。

说完了上面的,下面就都非常简单了

大家尤其要注意最后一种,取前两行和后两列的操作,很多时候这是非常有用的步骤,会减少你使用循环,提高程序的运行速度。

讲解完了索引,我们来讲一下如何矩阵的内容以及删除矩阵的行列。

其实修改特定位置的值非常简单,我们都已经找到了,修改就是一瞬间的事情,

除了单个值的修改,我们 还可以对索引到的行和列进行修改 ,一般来说,我们会直接把要修改的结果放进向量中,然后进行修改,但是如果修改的值不够长,也是可以操作的,如下

如果你对上面的内容表示有些困惑,那么你应该回忆一下,

这里有着你需要了解的一切。

最后讲解如何删除矩阵的行列,这里的操作也和向量是一样的,具体请回顾

本文的全部内容就到此结束了,这篇文章讲解了 最最基本的矩阵创建方法,以及对矩阵进行索引的操作,加上修改矩阵元素和删除矩阵的列等等 ,这些都是使用矩阵的基础知识,需要彻底掌握,才能在矩阵的使用中得心应手。

下一篇文章将会介绍矩阵维度,矩阵转化为向量以及矩阵的各种运算,矩阵的转置等内容。

1、向量是用于存储数值型,字符型或者逻辑型数据的一维数组。执行组合功能的函数为c(),可以用来创建向量。向量可根据位置进行索引,需要用[]。 2、矩阵是一个二维数组,每个元素都拥有相同的模式,可通过函数matrix()创建矩阵。 3、数组是一个可以在两个以上维度存储数据的数据对象。例如,如果创建尺寸(2,3,4)的数组,那么就是创建4个矩形矩阵每个2行3列。数组只能存储数据类型。 4、矩阵和数组一样都只能包含一种数据类型,当有多种模式的数据时,使用数据框就更为方便。数据框可以用函数data.frame () 创建。 5、$  被用来选取一个给定数据框中的某个特定变量。 6、attach()绑定数据集,detach()解除数据集。 7、with:attach,detach最好在单独的数据框内使用,在多个同名对象最好不要使用,函数with(),可以再具有多个同名对象的数据框内使用,但是必须加入花括号{},这样就无须担心名称冲突了,但是它也有局限性,赋值仅在此函数的括号内生效。 8、列表是一些对象的有序集合。 9,、数据导入 read.table(),其中header = T,代表第一行为变量名称,不作为数据,header = F相反。sep代表数据分隔符,txt为"\t",csv为","。 10、table函数,用 table() 函数统计因子各水平的出现次数(称为频数或频率)。 >sex = c("女","女","女","男","男") >table(sex) >sex   男 女   2 3 求众数 >aim = table(sex)[table(sex)==max(table(sex))] >aim   女    3 > max(table(sex)) [1] 3 > table(sex)==max(table(sex))   sex   男    女   FALSE TRUE 11、 无尺度网络: 是指在某一复杂的 系统 中,大部分节点只有少数几个连结,而某些节点却拥有与其他节点的大量连结。这些具有大量连结的节点称为“集散节点”,所拥有的连结可能高达数百、数千甚至数百万。这一特性说明该网络是无尺度的,因此,凡具有这一特性的网络都是无尺度网络。 12、options(stringsAsFactors = F) #在调用as.data.frame的时,将stringsAsFactors设置为FALSE可以避免character类型自动转化为factor类型。 13、class():查看数据结构:vector、matrix、array、dataframe、list。 14、str():作用用英语来表示是:check classification of viriables,一般用于检查数据框当中有哪些数据。 15、mode() :查看数据元素类型。 16、typeof() :查看数据元素类型,基本等同于mode(),比mode()更为详细。 17、example():假设有一个函数foo,example("foo"),函数foo的使用示例。 18、apropos():列出名称中含有foo的所有可用函数。apropos("foo",mode="function")。 19、data():列出当前已加载包中所含的所有可用示例数据集。 20、ls():列出当前工作空间中的对象。 21、rm():移除(删除)一个或多个对象。 22、history(#):显示最近使用过的#个命令(默认值为25)。 23、options():显示或设置当前选项。有一个收藏文件有介绍options的功能。 24、boxplot():生成盒型图。 25、sum():计算和。sum(x,na.rm = TRUE)。 26、median():计算中位数。 27、cbind():以列结合变量。cbind(x,y,z)。 28、rbind():以行结合变量。 29、vector():以向量形式结合数据。vector(length = 10)。 30、rep():以矩阵形式结合数据。rep(c(1,,2,3),each = 10) 31、seq():生成一个有序的数列。seq(1,10)。 32、dim():矩阵或者cbind输出的维数。dim(Mydata)。 33、scan():从ascii文件中读取数据。scan(file = "test.txt")。 34、write.table():把一个变量写入到ascii文件。write.table(Z,file = "test.txt")。 35、order():确定数据的顺序。order(x)。 36、merge():合并两个数据框。merge(x,y,by = "ID")。 37、str():显示一个对象的内部结构。str(Mydata)。 38、factor():定义变量作为因子。factor(x)。 39、tapply():tapply(X = Veg$R,INDEX = Veg$Transect,FUN = mean).tapply函数根据第二个变量(Transect)的不同水平对第一变量(R)进行了求平均值运算。还可以求sd,var,length等操作。R语言初学者指南P75详细介绍了这个函数。 40、下一页介绍了sapply和lapply。 41、summary():计算基本信息。 42、table():计算列联表,统计因子各水平的出现次数(频数或频率)。table(x,y)。 43、plot():y对x的图形。pch形状,col颜色。 44、par():par(mfrow = c(2,2),mar = c(3,3,2,1)) mfrow生成一个具有4个面板的图形窗口。mar选项指定每个图形周围空白的大小,底部、左侧、顶部、右侧。 45、paste():将变量连接成字符串。paste("a","b",sep = "")。 46、log(): log = "x",log = "y",log = "xy",生成对数轴。 47、%in%: a<-c(1,3,13,1443,43,43,4,34,3,4,3) b<-c(1,13,11,1313,434,1) a%in%b # 返回内容#  [1] TRUE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE # 取反操作 !(a%in%b) 48、sort()函数是对向量进行从小到大的排序 rank()函数返回的是对向量中每个数值对应的秩 order()函数返回的值表示位置,依次对应的是向量的最小值、次小值、第三小值……最大值等(位置索引) arrange()函数(需加载dplyr包)针对数据框,返回基于某列排序后的数据框,方便多重依据排序。 49、subset(): df <- data.frame( a = 1:10, b = 2:11, c = 3:12 )df <- subset(df, select = c(a,c)) #选取列a和c df <- subset(df, select = -c(a,c) ) #去除列a和c