![R语言:迈向大数据之路](https://wfqqreader-1252317822.image.myqcloud.com/cover/909/27110909/b_27110909.jpg)
4-6 向量对象元素的存取
4-6-1 使用索引取得向量对象的元素
了解向量对象的概念后,本节将介绍如何取得向量内的元素,由先前实例可以看到每一个数据输出时输出数据左边均有“[ 1 ]”,中括号内的“1”代表索引值,表示是向量对象的第1个元素。R语言与C语言不同,它的索引(Index)值是从1开始(C语言从0开始)的。
实例ch4_46:认识向量对象的索引。
![](https://epubservercos.yuewen.com/6CA2AF/15477644904546506/epubprivate/OEBPS/Images/Img00160.jpg?sign=1739526750-9k94kuwdK4Qx71tmCdWc2ZcnBbu2ySa1-0-2ecaec0fa49987d5be73ab477038e969)
在上述实例中,numbers_List向量对象的第1个元素是25,对应索引[1],第2个元素是24,对应索引[2],第23个元素是3,对应索引[23]。
实例ch4_47:延续前一实例,分别从向量对象numbers_List取得第3个数据、第19个数据和第24个数据的实例。
![](https://epubservercos.yuewen.com/6CA2AF/15477644904546506/epubprivate/OEBPS/Images/Img00161.jpg?sign=1739526750-8lt9DjQmN0O9eWo6AxZgd8SYI23CvsSt-0-68791b1daac7af622eff8f3b389a61f7)
上述只是很普通的指令,R语言的酷炫之处在于索引也可以是一个向量对象,这个向量对象可用c()函数建立起来。所以可以用下列简单的指令取代上述指令,取得索引值为3、19和24的值。
实例ch4_48:延续前一实例,索引也可以是向量的应用实例。
![](https://epubservercos.yuewen.com/6CA2AF/15477644904546506/epubprivate/OEBPS/Images/Img00162.jpg?sign=1739526750-Sebsb1eVHSBlpwD0sSK2fHzDA1UqrRRQ-0-f687f21956b4350f785a57eeaa5ccf4d)
此外,我们也可以用下列已建好的向量对象当作索引取代上述实例。
实例ch4_49:延续前一实例,索引也可以是向量对象的另一个应用实例。
![](https://epubservercos.yuewen.com/6CA2AF/15477644904546506/epubprivate/OEBPS/Images/Img00163.jpg?sign=1739526750-l4jAG3oYAPjNIx2BhW8IfXfFWJ6lUZFo-0-5c2e214ccb2caafb199e71d27f89a06c)
其实上述利用索引取得原向量部分元素(也可称子集)的过程为取子集(Subsetting)。
4-6-2 使用负索引挖掘向量对象内的部分元素
我们可以利用索引取得向量对象的元素,也可以利用索引取得向量对象内不含特定索引所对应元素的部分元素,方法是使用负索引。
实例ch4_50:取得向量对象内不含第2个元素以外的所有其他元素。
![](https://epubservercos.yuewen.com/6CA2AF/15477644904546506/epubprivate/OEBPS/Images/Img00164.jpg?sign=1739526750-0tuWrMSj2GxQRWdgdAMtAhNRPtYmoxpn-0-bdd3540d18f9e272653e769d0267de3e)
由上述实例可以看到newnumber_List向量对象不含元素“24”。此外,负索引也可以是一个向量对象,因此也可以利用此特性取得负索引向量对象所指以外的元素。
实例ch4_51:负索引也可以是一个向量对象的应用,下列是取得除第1个到第15个以外元素的实例。
![](https://epubservercos.yuewen.com/6CA2AF/15477644904546506/epubprivate/OEBPS/Images/Img00165.jpg?sign=1739526750-yprDqkjsQyXFwfm9AoP8s4RukDCg3edk-0-0f30913839a755d38df0902f1e7ebd3c)
需留意的是索引内是使用“-(1:15)”,而不是“-1:15”。可参考下列实例。
实例ch4_52:错误使用索引的实例。
![](https://epubservercos.yuewen.com/6CA2AF/15477644904546506/epubprivate/OEBPS/Images/Img00166.jpg?sign=1739526750-zFPGf2CiZ3IzJDYE9hmzcF6IChAh3P5P-0-e7ac299fc297ba941d0160861fae2529)
4-6-3 修改向量对象元素值
使用向量对象做数据记录时,难免会有错,碰上这类情况,可以使用本节的方法修改向量对象元素值。下列是将Jordon第2场进球数修改为8的实例。
实例ch4_53:修改向量对象元素值的应用实例。
![](https://epubservercos.yuewen.com/6CA2AF/15477644904546506/epubprivate/OEBPS/Images/Img00167.jpg?sign=1739526750-wcnyhPcDjIbpGy3f1ABrrS8ZgUHTTa5b-0-80c085e4be0ce6c0d4e999c5545bcad3)
从上述结果,可以看到第2场进球数已经修正为8球了。此外,上述修改向量对象的索引参数也可以是一个向量对象,例如,假设第1场和第6场,Jordon的进球数皆是12,此时可使用下列方式修正。
实例ch4_54:一次修改多个向量对象元素的应用实例。
![](https://epubservercos.yuewen.com/6CA2AF/15477644904546506/epubprivate/OEBPS/Images/Img00168.jpg?sign=1739526750-5Vi2L93PIzI9t02sqOmdWailhBkrAlUb-0-cab93864a38c5a97cfbc1f9bebeebc97)
当修改向量对象元素数据时,原始数据就没了,所以建议各位读者,在修改前可以先建立一份备份,下列是实例。
实例ch4_55:修改向量对象前,先做备份的应用实例。
![](https://epubservercos.yuewen.com/6CA2AF/15477644904546506/epubprivate/OEBPS/Images/Img00169.jpg?sign=1739526750-iamSIO11AAuARKxl7brmyGozoXBvp4W1-0-8b60ee9650b53209af5fdd3094d8cfe5)
实例ch4_56:下列是将Jordon第6场进球数修改为14的实例。
![](https://epubservercos.yuewen.com/6CA2AF/15477644904546506/epubprivate/OEBPS/Images/Img00170.jpg?sign=1739526750-kgh2YKCTefc1K7wCLS2UZGAzfBxew1AN-0-fa0b562d77f040e3bc97a13da7263b60)
由上述实例可以看到Jordon第6场进球数已经被修正为14。如果现在想将Jordon的各场次进球数数据复原为原先备份的向量对象的值,可参考下列实例。
实例ch4_57:复原原先备份的向量对象的应用实例。
![](https://epubservercos.yuewen.com/6CA2AF/15477644904546506/epubprivate/OEBPS/Images/Img00171.jpg?sign=1739526750-RhHPdFn9945HD33RtyU4wkNAO8FghNkZ-0-f754aba107e35ace06b34e87bc347003)
4-6-4 认识系统内建的数据集letters和LETTERS
本小节将以R语言系统内建的数据集letters和LETTERS为例,讲解如何取得向量的部分元素或称取子集(Subsetting)。
实例ch4_58:认识系统内建的数据集letters和LETTERS。
![](https://epubservercos.yuewen.com/6CA2AF/15477644904546506/epubprivate/OEBPS/Images/Img00172.jpg?sign=1739526750-KY0VCtPiEA4uKUL9CBCJyFcOBmjJrHoY-0-bcc9223fce2154133c2e3214a164f759)
实例ch4_59:取得letters对象索引值10和18所对应的元素。
![](https://epubservercos.yuewen.com/6CA2AF/15477644904546506/epubprivate/OEBPS/Images/Img00173.jpg?sign=1739526750-D49J3Cej6z7vyw0mlprLFthqiPwQne8Y-0-ad0f7be5bcb0a8ec5e38529acd050e0f)
实例ch4_60:取得LETTERS对象索引值21至26所对应的元素。
![](https://epubservercos.yuewen.com/6CA2AF/15477644904546506/epubprivate/OEBPS/Images/Img00174.jpg?sign=1739526750-CR2qhv6zmsfgpQCrm9YNjsfIZq8gjALI-0-b0430fda0d84c5179cc75a3ce759574f)
对前面的实例而言,由于我们知道有26个字母,所以可用“21:26”取得后面6个元素。但是有许多数据集,我们不知道它们的元素个数,应该怎么办?R语言提供tail()函数,可解决这方面的困扰,可参考下列实例。
实例ch4_61:使用tail()函数取得LETTERS对象最后8个元素。并且测试,如果省略第2个参数,会列出多少个元素。
![](https://epubservercos.yuewen.com/6CA2AF/15477644904546506/epubprivate/OEBPS/Images/Img00175.jpg?sign=1739526750-Pdr6kwSAnvvALnCG1RasNzYi0AulN2zF-0-f4c219584271171c68a87dd0fe5be3be)
有上述实例可知,tail()函数的第一个参数是数据集的对象名称,第二个参数是预计取得多少元素,如果省略第二个参数,则系统自动返回6个元素。head()函数的使用方式与tail()函数相同,但是返回数据集的最前面的元素。
实例ch4_62:使用head()函数取得LETTERS对象的前8个元素。并且测试,如果省略第2个参数,会列出多少个元素。
![](https://epubservercos.yuewen.com/6CA2AF/15477644904546506/epubprivate/OEBPS/Images/Img00176.jpg?sign=1739526750-yjfh01x2iUSvSDyYx4ZUXgaqSQg5uhqp-0-ddced195bc9d4adfdbca422b95eaea40)