R语言支持的数据结构

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R语言支持的数据结构相关的知识,希望对你有一定的参考价值。

基本数据类型

  • 数值型:数据型主要分为整数型和双精度型,默认是双精度型数据。可以写成整数形式、小数形式、科学计数法。
  • 字符型:双引号或单引号括起来的字符串
  • 逻辑型:取值只能为T(TRUE)或F(FALSE)
  • 复数型:形如a+bi的数据
  • 原始型:二进制数据
  • 日期型:Date或POSIXc。

数据对象

向量

向量是由相同基本数据类型的元素组成的序列,相当于一维数组。 向量是用于存储数值型、字符型或逻辑型数据的一维数组。

创建向量:

  • 创建向量使用函数c(),该函数可以有任意多个参数,它会将这些参数首尾相连。 示例:创建a是数值型向量,b是字符型向量,而c是逻辑型向量
a <- c(1,2,4,5,8)
b <- c("one","two","three")
c <- c(TRUE,FALSE,TRUE,TRUE,FALSE)

注意,单个向量中的数据必须拥有相同的类型或模式(数值型、字符型或逻辑型)。同一向量中无法混杂不同模式的数据。

  • past():将自变量对应的元素连成一个字符串,长度不相同时,较短的向量会被重复利用。
x <- paste("i",1:5,sep = ",")
x
  • assign():对向量进行赋值
assign("i",c(11,22,33,44))
i

生成规则序列

示例:

x <- 1:5
x

y <- 5:1
y

2* 1:5

示例:seq(from,to,by)

seq(1,9,2)
seq(-1,-10,-1)

示例:seq(from,by,length)

seq(2,by=2,length=5)

重复一个对象 示例:rep(x,times,….)

rep(c(1,2,3),4) #1 2 3 1 2 3 1 2 3 1 2 3
rep(c(1,2,3),each=4)  #1 1 1 1 2 2 2 2 3 3 3 3
rep(1:3) # 1 2 3
rep(2,4) #2 2 2 2
rep(1:4,rep(3,4)) # 1 1 1 2 2 2 3 3 3 4 4 4
rep(1:4,1:4)   #1 2 2 3 3 3 4 4 4 4

向量运算

向量的乘法、除法和乘方运算是对应向量的每个分量做乘法、除法和乘方 示例:

x <- c(1,3,5,7)
y <- c(2,4,6,8)
x+y
x-y
x*y
x/y
x^y

常见函数

函数 功能 函数 功能
length 求元素的个数
mode 返回向量的数据类型
min 向量的最小值 max 向量的最大值
range 向量的范围
which.min 在第几个分量求得最小值 which.max 在第几个分量求得最大值
mean 均值 median 中位数
var 方差 sd 标准差
sort 顺序排序 rev 逆序排序
rank 求数据排序的相对位置
prod 求向量连乘的积
append 添加
replace 替换
match 匹配 pmatch 部分匹配
all 判断所有 any 判断部分

示例:

x <- c(1:10)
x
length(x)
mode(x)
range(x)
which.max(x)
which.min(x)
mean(x)
median(x)
var(x)
sd(x)
x <- c(1,8,2,4,7,3,5,9)
sort(x)
rev(x)
rank(x)
prod(x)
append(x,1:10,after = 4)

向量索引

示例:

x <- c(1:7)
x
x[1]
x[length(x)]
x[-3] # 下标取负数,表示删除指定位置处的元素
x

数组

数组是类型相同的多个元素的集合 可以将一维数组看成向量,将二维数组看成矩阵 定义数组的语法: array(data=NA,dim=length(data),dimnames=NULL)

示例:生成维数为2,3,4的三维数组

array(1:24,c(2,3,4))

示例:dim():返回数组的维数

a <- array(1:24,c(2,3,4))
dim(a)

示例:dim()将向量转换为数组或矩阵

a <- array(1:16)
a
dim(a) <- c(2,2,4)
a

因子

分类时,经常要把数据分成不同的水平或因子,比如学生的性别包含男女两个因子。 因子代表变量不同可能的水平,在统计分析中十分有用。 语法: factor(x=character(),levels,labels=levels,exclude=NA,ordered=is,ordered(x)) 其中:

  • levels:因子的水平
  • labels:水平的名字
  • exclude:在x中需要排出的水平
  • ordered:决定的因子的水平是否有序 示例:
x <- c(1,2,1,1,1,2)
y = factor(x)
y

示例:生成有序因子

x <- c("a","b","b","c","d","c","a","e","a")
y <- ordered(x,levels=c("e","d","c","b","a"))
y

列表

向量、矩阵、数组中的元素必须相同。 列表中元素的类型可以不相同。 有点像C语言中的结构体、Python中的字典。

语法: list(变量1=分量1,变量2=分量2,……)

示例:

a <- 1001
b <- "zhangsan"
c <- c(78:81)

x <- list(a,b,c)
x

示例:

a <- c(1,2,3,4,5)
b <- c("nan","nan","nv","nan","nv","nan")
c <- c(TRUE,TRUE,FALSE,FALSE,FALSE)
x <- list(aa=a,bb=b,cc=c)
x



# 访问第一个元素
# 列表的索引
x[[1]] 
x$aa
x$bb

# 绑定列表 attach()
attach(x)
aa
bb

# 转化为向量 unlist()
y <- unlist(x)
y
y[1]
y[3]
y[7]

示例:

a <- c(1:5)
b <- c(77,33,22,44)

x <- list(a=a,b=b)
x
# 计算操作
# lapply():返回一个列表
# sapply():返回一个向量或者矩阵

lapply(x, sum)
lapply(x, sum)[[1]]
lapply(x, sum)$a

sapply(x, sum)
sapply(x, sum)[1]

矩阵

矩阵是将元素按行和列的形式排列,形成二维数组的形式。 定义矩阵的语法: matrix(data=NA,nrow=1,ncol=1,byrow=FALSE,dimnames=NULL) 其中:

  • data:数据元素
  • nrow:行数
  • ncol:列数
  • byrow:指默认按列排列
  • dimnames:给定行和列的名称 示例:
matrix(1:30,nrow=6,dimnames = list(c(1:6),c("one","two","three","four","five")))

结果:

示例:将一个nm的矩阵转为mn的矩阵

a <- matrix(1:12,nrow = 3)
a
t(a)

结果:

示例:矩阵的加减乘除

a <- matrix(1:6,nrow = 2)
a
b <- matrix(6:11,nrow = 2)
b

a+3
a*3
a^3

a+b
b-a


c <- matrix(8:13,nrow = 3)
c

a %*% c  # 矩阵相乘
crossprod(a,b)

数据框

数据框(Data Frame)是一种矩阵形式的数据,它由行和列组成。 数据框中不同列数据的类型可以不同。而矩阵是必须相同的。 数据框的每一列都有列名(必须),可以通过这个列名访问指定列的数据。每一行也可以指定行名。如果不指定行名,默认使用从1开始的Sequence来标识每一行。 数据框的要求:

  • 数据框的分量必须是向量、因子、数值矩阵、列表或者其他数据框
  • 列表、数据框和矩阵为新的数据框提供了尽可能多的变量,因为他们各自有各自的列、元素或变量
  • 数据框中以变量出现的向量结构必须长度一致,矩阵结构也必须有同样的行数
  • 因子、数值向量和逻辑值保持原有的格式,而字符向量会被强制转换成因子,并且他们的水平就是微量中出现的独立值

生成数据框的语法 data.frame(…,row.names=NULL,check.rows=FALSE,…)

示例:

name <- c("zhangsan","lisi","wanger","mazi")
sex <- c("nan","nv","nv","nv")
age <- c(18,22,33,17)

df <- data.frame(name,sex,age)
df
class(df)  # 查看类型
df[1,3]
# 通过索引访问
df$sex  # 获取指定列的数据
df$name[2]

# 添加新列
df$score <- c(77:80)
df

# 查询满足条件(score==80)的数据
df[which(df$score==80),]

示例:

# 定义矩阵
m <- matrix(c(1:12),nrow = 3)
m
# 将矩阵转换成数据框
mf <- as.data.frame(m)
mf

示例:连接:merge()

name <- c("zhangsan","lisi","wanger","mazi")
sex <- c("nan","nv","nv","nv")
age <- c(18,22,33,17)
score <- c(18,27,19,18)
m1 <- data.frame(name,sex,age,score)
m1

# 函数参数要使用等号=,不要使用<-
m2 <- data.frame(name = name,weight = c(67:70),age = c(18,19,17,20))
m2


# 连接:查找age相同的
merge(m1,m2,by.x = "age",by.y = "age")

示例:合并:

  • rbind():要求列数相同
  • Cbind():要求行数相同

示例:

name <- c("zhangsan","lisi","wanger","mazi")
sex <- c("nan","nv","nv","nv")
age <- c(18,22,33,17)
score <- c(18,27,19,18)
m1 <- data.frame(name,sex,age,score)
m1

m2 <- data.frame(name = name,weight = c(67:70),age = c(18,19,17,20))
m2

cbind(m1,m2)

示例:

m <- data.frame(weight = c(67:70),age = c(18,19,17,20))
m
# 对每一列求和
lapply(m, sum) # 返回的是一个列表

# 
sapply(m, sum) # 返回的是一个向量

以上是关于R语言支持的数据结构的主要内容,如果未能解决你的问题,请参考以下文章

R语言中的偏最小二乘PLS回归算法

python numpy array 与matrix 乘方

R语言支持的数据结构

技多不压身:支持向量机在 R 语言中的实现和使用

R语言SVM支持向量机模型数据分类实战:探索性数据分析模型调优特征选择核函数选择

Matlab 提取R,G,B颜色分量