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语言支持的数据结构的主要内容,如果未能解决你的问题,请参考以下文章