R基本对象
- 数值型 (Numeric)
> vx <- 23.5
> class(vx)
[1] "numeric"
- 逻辑型 (Logical)
> vx <- TRUE
> class(vx)
[1] "logical"
- 字符型 (Character)
> vx <- 'TRUE'
> class(vx)
[1] "character"
- 整数型 (Integer)
> vx <- 34L
> class(vx)
[1] "integer"
- 复合型 (Complex)
> vx <- 2+5i
> class(vx)
[1] "complex"
- 缺省值(missing value)
> xx <- c(TRUE, FALSE, NA)
> is.na(xx)
[1] FALSE FALSE TRUE
> xx <- c(1, 2, NA)
> is.na(xx)
[1] FALSE FALSE TRUE
- 原型 (Raw)
> vx <- charToRaw('database')
> class(vx)
[1] "raw"
- 数据对象的辨别及转换
类型 | 辨别函数 | 转换函数 |
---|---|---|
numeric | is.numeric() |
as.numeric() |
logical | is.logical() |
as.logical() |
character | is.character() |
as.character() |
NA | is.na() |
as.na() (新版本无) |
NULL | is.null() |
as.null() |
double | is.double() |
as.double() |
complex | is.complex() |
as.complex() |
integer | is.integer() |
as.integer() |
> x <- c(-1, 3, 2, NA)
> is.na(x)
[1] FALSE FALSE FALSE TRUE
> is.numeric(x)
[1] TRUE
> as.character(x)
[1] "-1" "3" "2" NA
> xx <- c(TRUE, FALSE, NA)
> xx
[1] TRUE FALSE NA
> as.character(xx)
[1] "TRUE" "FALSE" NA
> as.integer(39.8)
[1] 39
> is.integer(39.8)
[1] FALSE
> is.integer(39)
[1] FALSE
> is.integer(39L)
[1] TRUE
> is.numeric(39L)
[1] TRUE
查看对象类型
-
mode()
查看数据的大类 -
class()
查看数据的类 -
typeof()
查看数据的细类
单个整数会自动转换成double
型,而使用2:4
时因为有累加预设,会被认为是integer
型,而c(1, 3, 4)
无累加预设,所以里面的元素会单独作为double
型
> xx <- c(1, 2, 3) #
> mode(xx); class(xx); typeof(xx)
[1] "numeric"
[1] "numeric"
[1] "double"
> xx <- 4:7
> mode(xx); class(xx); typeof(xx)
[1] "numeric"
[1] "integer"
[1] "integer"
> xx <- 4
> mode(xx); class(xx); typeof(xx)
[1] "numeric"
[1] "numeric"
[1] "double"
> xx <- 4L
> mode(xx); class(xx); typeof(xx)
[1] "numeric"
[1] "integer"
[1] "integer"
# R来源于C,可参考C的数据存贮方式
# https://blog.csdn.net/github_33873969/article/details/78040129
R数据结构
- 向量 (vector)
c()
,which
,subset
,match
,%in%
,seq
,rep
> x1 <- c(13, 14, 155, 187, 200, 231)
> x1[c(1:3)
# which 查找元素位置
> which(x1 == c(13, 187))
[1] 1 4
# subset 检索向量中的元素
> subset(x1, x1 < 200 & x1 > 100)
[1] 155 187
# match 判断向量中的元素
> match(x1, c(13, 155))
[1] 1 NA 2 NA NA NA
# %in% 判断向量是否包含某数据
> c(1, 14, 155) %in% x1
[1] FALSE TRUE TRUE
# 等差序列创建
> seq(1, -9)
[1] 1 0 -1 -2 -3 -4 -5 -6 -7 -8 -9
# 重复序列创建
> rep(1:3, 4)
[1] 1 2 3 1 2 3 1 2 3 1 2 3
- 矩阵 (matrix)
rbind()
,cbind()
colSums()
,rowSums()
,colMeans()
,rowMeans()
,t()
,det()
,crossprod()
,outer()
,%*%
,diag()
,solve()
,eigen()
> a <- matrix(c(1:10), ncol=2, nrow=5, byrow=F)
> a1 <- rbind(a, c(11,12))
> a2 <- cbind(a, c(11:15)
> a3 <- rbind(a, 1)
- 数组 (array)
数组是矩阵的扩展,可把维度扩展到两个以上,数组中元素的类型是单一的。
> x1 <- c(1:30)
> dim1 <- c('A1', 'A2', 'A3')
> dim2 <- c('B1', 'B2', 'B3', 'B4', 'B5')
> dim3 <- c('C1', 'C2')
> a <- array(x1, dim=c(3,5,2), dimnames=list(dim1, dim2, dim3))
, , C1
B1 B2 B3 B4 B5
A1 1 4 7 10 13
A2 2 5 8 11 14
A3 3 6 9 12 15
, , C2
B1 B2 B3 B4 B5
A1 16 19 22 25 28
A2 17 20 23 26 29
A3 18 21 24 27 30
> a[2,4,1]; a['A2', 'B4', 'C1']
[1] 11
[1] 11
- 因子(factor)
gl()
> gl(2, 1, 10) # gl(n,k,length,...) n: 因子水平个数,k: 重复数
[1] 1 2 1 2 1 2 1 2 1 2
Levels: 1 2
# 因子存储方式
> status <- c('Poor', 'Improved', 'Excellent', 'Poor')
> class(status)
[1] "character"
> status.factor <- factor(status, ordered=TRUE)
> class(status.factor)
[1] "ordered" "factor"
> storage.mode(status.factor)
[1] "integer"
> as.numeric(status.factor)
[1] 3 2 1 3
> levels(status.factor)
[1] "Excellent" "Improved" "Poor"
- 列表 (list)
使用R语言进行数据分析中向量和数据框的使用频率是最高的,列表则用于存储较复杂的数据。这么多R函数的运行结果都是以列表的形式返回的
> data <- list(a=c(1, 2, 3, 4), b=c('one', 'two', 'three'), c=c(TRUE, FALSE), d=(1+2i))
> data
$a
[1] 1 2 3 4
$b
[1] "one" "two" "three"
$c
[1] TRUE FALSE
$d
[1] 1+2i
> summary(data)
Length Class Mode
a 4 -none- numeric
b 3 -none- character
c 2 -none- logical
d 1 -none- complex
> data[[1]]
[1] 1 2 3 4
> data$a
[1] 1 2 3 4
> data[[1]][1]
[1] 1
- 数据框 (data frame)
> data_iris <- data.frame(Sepal.Length=c(5.1, 4.9, 4.7, 4.6), Sepal.Width=c(3.5, 3.0, 3.2, 3.1), Petal.Length=c(1.4, 1.4, 1.3, 1.5), Petal.Width=rep(0.2, 4))
> data_iris
Sepal.Length Sepal.Width Petal.Length Petal.Width
1 5.1 3.5 1.4 0.2
2 4.9 3.0 1.4 0.2
3 4.7 3.2 1.3 0.2
4 4.6 3.1 1.5 0.2
> data_iris[,1]
[1] 5.1 4.9 4.7 4.6
> data_iris$Sepal.Length
[1] 5.1 4.9 4.7 4.6
> data_iris['Sepal.Length']
Sepal.Length
1 5.1
2 4.9
3 4.7
4 4.6
> data_iris$Petal.Species = rep('setosa', 4)
> data_iris
Sepal.Length Sepal.Width Petal.Length Petal.Width Petal.Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
> (data_iris <- rbind(data_iris, list(5.0, 3.6, 1.4, 0.2, 'setosa')))
Sepal.Length Sepal.Width Petal.Length Petal.Width Petal.Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa