R语言学习 - 第2部分 数据类型

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

你可能感兴趣的:(R语言学习 - 第2部分 数据类型)