![数据分析与挖掘:R语言](https://wfqqreader-1252317822.image.myqcloud.com/cover/99/40795099/b_40795099.jpg)
1.3 R的简单操作
R是进行数学运算、数据处理和科学计算的强大工具。下面给出一些R的简单操作示例。
1.3.1 基本数学运算
从1+1开始示例:
![](https://epubservercos.yuewen.com/C80623/21190707101160106/epubprivate/OEBPS/Images/41538-00-17-1.jpg?sign=1739090417-TSNyuxFGbp1eEwxIDKAZMD88DoZ24ivP-0-89c0d35262095c5bfc7cf4112b821a5c)
运行后返回值为2。下面是复杂一点的运算示例:
![](https://epubservercos.yuewen.com/C80623/21190707101160106/epubprivate/OEBPS/Images/41538-00-17-2.jpg?sign=1739090417-GWhGd6INKHXYbNu7m2z31RAX8gJPi61S-0-b24432937c21cf3ff6e99197112e407c)
由此可以看出,R中的计算遵循数学运算的顺序,优先级从高到低依次为小括号、乘除、加减。
1.3.2 变量
变量是任何语言中都不可缺少的一部分,R中不需要事先定义变量的类型,它可以存储任何类型的数据,也可以存储任何R对象,如函数、分析的结果及图形。单个变量在某一时刻取值为数字,而后可以被赋值为字符,也可再赋值为数字。
1.3.2.1 变量赋值
对变量进行赋值不受赋值类型的限制,有效的赋值操作符号是“<-”和“=”,建议用前者,赋值符号“<-”是一个整体,中间不能有空格。例如:
![](https://epubservercos.yuewen.com/C80623/21190707101160106/epubprivate/OEBPS/Images/41538-00-18-1.jpg?sign=1739090417-PqwXe93tHSZJheZjzOEPPxcilxzaTgWX-0-9076cc5adcc20694528be3c7585ddf56)
以上示例创建了两个变量x、y,分别赋值为3、4,并计算了两个变量的和。
1.3.2.2 删除变量
用rm函数可以删除用户已定义的变量且删除后的变量无法找回,这一点在使用该命令时要特别注意。例如:
![](https://epubservercos.yuewen.com/C80623/21190707101160106/epubprivate/OEBPS/Images/41538-00-18-2.jpg?sign=1739090417-dEQCsvr7hWDLQV8eUuo1DH9diHj25yOe-0-2c86c3f2557176c825803bb6c5bf28b3)
以上示例说明rm删除变量命令会立即生效。
1.3.3 数据结构
R可以处理各种类型的数据,包括向量、矩阵、数组、数据框和列表,不同类型的数据在创建方式、结构复杂度及调用个别元素的方法等方面有所不同。
1.3.3.1 创建数据对象
创建向量、矩阵、数组、数据框和列表的函数依次为c()、matrix()、array()、data.frame()和list()。
创建向量示例:
![](https://epubservercos.yuewen.com/C80623/21190707101160106/epubprivate/OEBPS/Images/41538-00-18-3.jpg?sign=1739090417-wZaFOwwDpE0jjGD2mnpHmEdhVKrn5r2O-0-546bad93fde49a980cae4fab147ecc41)
以上示例创建了a、b、d、e 4个向量。a是由数字组成的一维向量,b由字符串组成,d由数字和字符串组成,e由向量a和b合并而成。由4个变量的构成可以看出它们的数据类型互不相同。
在R中查看数据类型的函数为mode,mode函数可以查看变量定义的数据类型。例如:
![](https://epubservercos.yuewen.com/C80623/21190707101160106/epubprivate/OEBPS/Images/41538-00-18-4.jpg?sign=1739090417-8GCxTrE9A7rD3Fl7rdYeePsjyFZHbuzu-0-48a11ce73ea1e2ba975cc527c3834f4e)
由以上示例可以看出,在R中如果向量中包含多个数据类型则会进行格式转换。例如,向量中既有数字又有字符串,为了使向量中的数据类型统一会将所有数字项都转换成字符串,如向量d 和e。
创建数据框示例:
![](https://epubservercos.yuewen.com/C80623/21190707101160106/epubprivate/OEBPS/Images/41538-00-19-1.jpg?sign=1739090417-rucaiXaBNLeXFjUKQtQ8okF4so0aSn2I-0-5bd041ccbcf7348f18e43325cfcd3439)
运行结果报错,说明向量中的元素个数不同,所以数据框要求每一列元素的个数相同。例如:
![](https://epubservercos.yuewen.com/C80623/21190707101160106/epubprivate/OEBPS/Images/41538-00-19-2.jpg?sign=1739090417-B4uKArxX4MJD1WXX7G0yjSbyfUUJcdvr-0-e009e7fb06e3712f0d29680c6b43272d)
运行结果的第一行为默认的列名称,第一列为默认的行数。由运行结果可以看出,数据框中的列不同数据类型也可以不同,还可以通过names()函数为每一列指定名称。例如:
![](https://epubservercos.yuewen.com/C80623/21190707101160106/epubprivate/OEBPS/Images/41538-00-19-3.jpg?sign=1739090417-Y5yDm9RBnvGAgDRFgx0oiyBdQBTWCnik-0-577065fe36a545d64038c16e1c586428)
创建列表示例:
![](https://epubservercos.yuewen.com/C80623/21190707101160106/epubprivate/OEBPS/Images/41538-00-19-4.jpg?sign=1739090417-GFiJxlZNwdFi4APr9MBUt8XqvBh9yFf8-0-001f00d1f9950122590b718e828bffda)
列表不改变各子表的数据类型,允许每个子表中有不同的元素个数。
1.3.3.2 索引数据
R允许访问或索引数据结构中的部分元素,下面以矩阵为例进行说明。创建矩阵的函数为matrix(vector, nrow=number_of_rows, ncol=number_of_columns, byrow=logical_value, dimnames=list(char_vector_rownames, char_vector_colnames)),以vector为元素组成以number_of_rows乘number_of_columns的矩阵,元素的排列方式默认先按行排列,以dimnames列表中的第一个子表为行名称,第二个子表为列名称。
![](https://epubservercos.yuewen.com/C80623/21190707101160106/epubprivate/OEBPS/Images/41538-00-20-1.jpg?sign=1739090417-XT7vAvfKn2908pB3ojcrGduM33Ebr5nj-0-9a67e9e581f799bc005d2f9fa0f0fd71)
因为矩阵是由向量生成的,所以矩阵中的数据类型也只能是相同的,是数值型就都是数值型,是字符型就都是字符型。例如:
![](https://epubservercos.yuewen.com/C80623/21190707101160106/epubprivate/OEBPS/Images/41538-00-20-2.jpg?sign=1739090417-rWvF9DKU5GotCjjFQseejEEYXBInbhbh-0-024d62bcd27f2230edd54b6f57bc104b)
向量、数据框、列表的索引及访问方式与矩阵类似,数据框、列表的访问还可以通过列名称进行。例如:
![](https://epubservercos.yuewen.com/C80623/21190707101160106/epubprivate/OEBPS/Images/41538-00-20-3.jpg?sign=1739090417-CFHHft27fl3GWMhFuEPxT8FZifPySWup-0-8b4bea4ebf083a9e547687e7e13b9cd1)