数据类型
R 语言中的最基本数据类型主要有三种:
- 数字:一般形式或科学计数法
- 逻辑:布尔型(TRUE 、FALSE)
- 文本:字符串String,包含在单引号或者双引号之中。
按对象类型分为以下5种:
- 向量(vector)
> a = c(3, 4) > b = c(5, 0) > a + b [1] 8 4
向量后面加方括号输入数字标号,可以提取向量的一部分元素,也可以使用嵌套条件,如下。
> a = c(10, 20, 30, 40, 50) > a[1:4] # 取出第 1 到 4 项,包含第 1 和第 4 项 [1] 10 20 30 40 > a[c(1, 3, 5)] # 取出第 1, 3, 5 项 [1] 10 30 50 > a[c(-1, -5)] # 去掉第 1 和第 5 项 [1] 20 30 40
向量也可以和标量进行计算,常用的数学运算函数也能对向量起作用,同时还可以对向量进行排序等操作,如下。
向量数学运算: > c(1.1, 1.2, 1.3) - 0.5 [1] 0.6 0.7 0.8 > a = c(1,2) > a ^ 2 [1] 1 4 向量内元素排序: > a = c(1, 3, 5, 2, 4, 6) #sort函数升序排列 > sort(a) [1] 1 2 3 4 5 6 #rev函数降序排列 > rev(a) [1] 6 4 2 5 3 1 #order函数返回向量从小到大排序后在原始向量中位次 > order(a) [1] 1 4 2 5 3 6 > a[order(a)] [1] 1 2 3 4 5 6
向量的统计学处理函数:
sum
求和mean
求平均值var
方差sd
标准差min
最小值max
最大值range
取值范围(最大值和最小值)
向量的批量生成可以使用seq(起始值,终止值,length.out=数值个数)
命令,就能产生等差数列。也可以使用rep(数字,重复的个数)
命令来产生多个重复数字序列。如下。
> seq(1,9,length.out=3) [1] 1 5 9 > rep(2,5) [1] 2 2 2 2 2
向量中常会用到NA和NULL表示异常数值。NA
表示缺失,代表没有值但位置存在。NULL
表示数据不存在,啥也没有无意义。
向量的逻辑处理:which()
函数用来筛选需要的数据的下标,all()
函数用来检查向量是否全都是TRUE,any()
函数用来检查向量中是否含有TRUE。如下。
> a = c(11, 12, 13) > b = a > 12 > print(b) [1] FALSE FALSE TRUE > which(b) [1] 3 > vector = c(10, 40, 78, 64, 53, 62, 69, 70) > print(vector[which(vector >= 60 & vector < 70)]) [1] 64 62 69 > all(c(TRUE, TRUE, TRUE)) [1] TRUE > all(c(TRUE, TRUE, FALSE)) [1] FALSE > any(c(TRUE, FALSE, FALSE)) [1] TRUE > any(c(FALSE, FALSE, FALSE)) [1] FALSE
- 字符串(string)
文字内容以字符串形式储存,可以用'hahaha'
单引号或者"hahaha"
双引号都行,接下来介绍字符串的操作函数。
#全部转大写 > toupper("ShengXinFenXiBiJi") [1] "SHENGXINFENXIBIJI" #全部转小写 > tolower("ShengXinFenXiBiJi") [1] "shengxinfenxibiji" #统计字符数 > nchar("ShengXinFenXiBiJi") [1] 17 #截取编号从1到8的字符 > substr("ShengXinFenXiBiJi",1,8) [1] "ShengXin" #截取编号14之后的字符 > substring("ShengXinFenXiBiJi",14) [1] "BiJi" #将字符转换为数字 > as.numeric("123") [1] 123 #将数字转换成字符 > as.character(1234) [1] "1234" #以固定分隔符拆分字符 > strsplit("2022;9;16",";") [[1]] [1] "2022" "9" "16" #替换字符中的特定内容 > gsub("/","-","2022-9-16") [1] "2022-9-16" > gsub("-","/","2022-9-16") [1] "2022/9/16"
- 矩阵(matrix)
矩阵由向量生成,向量的值依次以一列一列的方式填充,如果想按行填充,添加byrow=TURE
参数。
> vector=c(1, 2, 3, 4, 5, 6) > matrix(vector, 2, 3, byrow=TRUE) [,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6
矩阵中每个值都能直接提取。
> m1 = matrix(vector, 2, 3, byrow=TRUE) > m1[1,1] # 第 1 行 第 1 列 [1] 1 > m1[1,3] # 第 1 行 第 3 列 [1] 3
矩阵的每一行和每一列都能设置名称,用下列方式完成。
> m1 = matrix(vector,2,3,byrow=TRUE) > colnames(m1) = c("s","f","f") > rownames(m1) = c("t","o") > m1 s f f t 1 2 3 o 4 5 6
往期推荐: