前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【基础】R语言2:数据结构

【基础】R语言2:数据结构

原创
作者头像
锂电池
发布2024-04-07 16:31:53
1050
发布2024-04-07 16:31:53

数据类型

数值型:用于直接计算加减乘除

字符串型:可以进行连接,转换,提取等

逻辑型:真或假

日期型等

R对象

  • R语言中的变量
  • 可以赋值给变量的任何事物,包括常量、数据结构、函数甚至图形
  • 对象都拥有某种模式,描述此对象是如何储存的,以及某个类

向量、标量

创建方式

代码语言:R
复制
x<-c()   #alt+-快捷生成
x=1:10
x=c(1:10)
 ##seq函数:生成等差数列
 seq(from=1,to=100,by=2)  #d=2
 seq(from=1,to=100,length.out=10) # 输出个数为10
 ##rep函数:重复数列
 rep(a,b) #重复b次a

标量

  • 与其他编程语言类似
  • R语言是向量化编程
  • a=2

向量索引

正负整数索引

代码语言:R
复制
length(x)  #向量中有多少个元素
x[1]    #访问向量第一个值 
x[-19]    #不输出第19个元素
x[c(4:18)]     #输出x中第4-18个元素
x[c(1,2,3,4,5)]   #输出x中第1,2,3,4,5个元素

逻辑向量索引

代码语言:R
复制
y <- c(1:10)
y[c(T,F,T,F,T,F,T,F,T,F)] 
1 3 5 7 9   #只输出TRUE值
y[c(T)]   #循环使用TRUE逻辑,输出所有值
y[c(F)]   #循环使用FALSE逻辑,整个向量值均为FALSE
y[c(T,F)]   #循环使用TRUE,FALSE逻辑,按顺序进行判断
#如果T,F数量多于向量值的数量,会输出NA缺失值

y[y>5 & y<9]
6 7 8
------------------------------------------------------------------------------------------
z <- c("one","two","three")
"one" %in% z   #%in%为判断符号
TRUE

z["one" %in% z] #z[TRUE] 
"one","two","three"

z %in% c("one","two")   #z向量中是否有"one","two"值
TRUE TRUE FALSE

z[z %in% c("one","two")]   #z[TRUE,TRUE,FALSE]
"one","two"

k <- z %in% c("one","two")   #k <- c(TRUE,TRUE,FALSE)
z[k]   #z[TRUE,TRUE,FALSE]
"one","two"

名称索引

代码语言:R
复制
y <- c(1,2,3,4,5)
name(y) <- c("one","two","three","four","five")
y
one two three four five
1    2    3    4     5
y["one"]    #赋值用(),查询用[]
1

修改向量

代码语言:R
复制
# 添加数据
1.直接添加
x<-c(1:100)
x[101]<-101

2.批量添加
v<-1:3
v
1 2 3
v[c(4,5,6)]<-c(4,5,6)
v
1 2 3 4 5 6 

3.中间出现空值
v[8]<-4
v
1 2 3 4 5 6 NA 4

4.在中间插入数据
appended(x=v,values=99,after=5)
1 2 3 4 5 99 6 NA 4

# 删除数据
1.删除整个向量
rm(v)

2.删除某个元素(正负整数索引)
y<-c(1:5)
y
1 2 3 4 5 
y[-c(1:3)]
y
4 5

# 修改数据-直接定位赋值
x[1]<-5

向量计算

1.直接用数学符号计算

2.向量之间计算

代码语言:R
复制
#元素个数相等
**  #幂次方
%%  #求余计算
%/%  #整除运算
#元素个数不相等,短的向量会被重复使用
#判断相等:== 一个=是赋值

3.逻辑计算

代码语言:R
复制
%in%  #包含运算符
>   #大于
<   #小于

4.计算函数

代码语言:R
复制
abs()   #绝对值
sqrt()   #平方根
log(16,base=2)   #log计算,base为底数 不加base默认自然对数 
exp()   #计算每个值的指数
ceilling()   #不小于x的最小整数
floor()    #不大于x的最大整数
trunc()   #返回整数部分
round(x,digits)   #四舍五入 (向量,保留位数)
sinif(x,digits)   #保留小数部分有效数字
三角函数()

4.统计函数

代码语言:R
复制
sum()   #求和
max()   #最大值
min()    #最小值
range()   #最大值 最小值
mean()   #平均值
var()    #方差
sd()     #标准差
prod()    #连乘的积
median()     #计算中位数
quantile(向量,c(0.4,0.5,0.8))     #分位数
which()    #查询元素索引值

矩阵matrix与数组

矩阵

代码语言:R
复制
# 创建矩阵
1.赋值函数matrix(元素数量必须符合分配规则)
matrix(1:20,4,5)
matrix(1:20,4,byrow=T)   #按行分布
matrix(1:20,4,byrow=F)   #按列分布
2.dim函数
dim(x)=c(4,5)

# 绘图
heatmap.()

# 定义矩阵行、列的名字
rownames=c("R1","R2","R3")
cnames
dimnames(m)=list(rownames,cnames)

数组

代码语言:R
复制
#创建数组
dim(x)=c(2,2,5)

矩阵的索引

代码语言:R
复制
# 矩阵下标访问
m[1,2]

矩阵的计算

代码语言:R
复制
#直接计算(矩阵之间行和列数要一致)
m+1
m+m

#内置函数
colsums()   #每一列的和
rowsums()    #每一行的和
colmeans()     #取均值
rowmeans()
n*t    #内积
n%*%t    #外积
diag()    #对角线的值
t(m)       #行和列互换

列表

创建

代码语言:R
复制
a=1:20
b=matrix(1:20,4)
c=mtcars
d="this is a test list"
mlist=list(a,b,c,d)

访问

代码语言:R
复制
mlist[1]
mlist[c(1,4)]    #访问多个元素使用向量
mlist$    #名称访问$

赋值

代码语言:R
复制
mlist[[5]]=iris

删除

代码语言:R
复制
#负值删除,或=NULL
mlist[[5]]=NULL

数据框

创建

代码语言:R
复制
state=data.frame(state.name,state.abb,state.x77)

访问

代码语言:R
复制
1.数值索引
2.$名称访问
3.attach()
4.with()

单双括号的区别

因子factor——用于统计分析

因子

用factor()函数把字符型向量转换成因子

代码语言:r
复制
x <- c("男", "女", "男", "男",  "女")
sex <- factor(x)
sex
## [1] 男 女 男 男 女
## Levels: 男 女
attributes(sex)
## $levels
## [1] "男" "女"
## 
## $class
## [1] "factor"

as.numeric(sex)    #把因子转换为纯粹的整数值
## [1] 1 2 1 1 2
as.character()  #把因子转换成原来的字符型
## [1] "男" "女" "男" "男" "女"

# factor()格式
factor(x, levels = sort(unique(x), na.last = TRUE), 
       labels, exclude = NA, ordered = FALSE)
 #levels:自行指定各水平值, 不指定时由x的不同值来求得
 #labels:指定各水平的标签, 不指定时用各水平值的对应字符串
 #exclude:指定要转换为缺失值(NA)的元素值集合
 #ordered:取真值时表示因子水平是有次序的(按编码次序)

cut()函数

  • 连续取值的变量,可以用cut()函数将其分段, 转换成因子
  • 使用breaks()参数指定分点, 最小分点要小于数据的最小值, 最大分点要大于等于数据的最大值, 默认使用左开右闭区间分组
代码语言:R
复制
cut(1:10, breaks=c(0, 5, 10))
##  [1] (0,5]  (0,5]  (0,5]  (0,5]  (0,5]  (5,10] (5,10] (5,10] (5,10] (5,10]
## Levels: (0,5] (5,10]
  • 指定breaks为一个正整数, 表示将数据范围略扩大后进行等间距分组
代码语言:R
复制
set.seed(1)
x <- sort(round(rnorm(20), 2))
f <- cut(x, breaks=4); f
##  [1] (-2.21,-1.26]  (-1.26,-0.305] (-1.26,-0.305] (-1.26,-0.305] (-1.26,-0.305]
##  [6] (-1.26,-0.305] (-0.305,0.647] (-0.305,0.647] (-0.305,0.647] (-0.305,0.647]
## [11] (-0.305,0.647] (-0.305,0.647] (-0.305,0.647] (-0.305,0.647] (0.647,1.6]   
## [16] (0.647,1.6]    (0.647,1.6]    (0.647,1.6]    (0.647,1.6]    (0.647,1.6]   
## Levels: (-2.21,-1.26] (-1.26,-0.305] (-0.305,0.647] (0.647,1.6]
  • 修改水平标记
代码语言:R
复制
levels(f) <- c("a", "b", "c", "d"); f
##  [1] a b b b b b c c c c c c c c d d d d d d
## Levels: a b c d
  • quantile()函数计算分位数作为分组
代码语言:R
复制
cu <- quantile(x, c(0, 1/4, 1/2, 3/4, 1))
cu[1] <- cu[1] - 0.01*(cu[5] - cu[1])
f2 <- cut(x, breaks=cu, oredered_result=TRUE)   #oredered_result=TRUE表示生成有序因子
levels(f2) <- c("a", "b", "c", "d"); f2
##  [1] a a a a a b b b b b c c c c c d d d d d
## Levels: a b c d

table()函数——统计频数

代码语言:R
复制
table(sex)
## sex
## 男 女 
##  3  2

tapply()函数

可以按照因子分组然后每组计算另一变量的概括统计

代码语言:R
复制
h <- c(165, 170, 168, 172, 159)
tapply(h, sex, mean)
##       男       女 
## 168.3333 164.5000

第一自变量h与与第二自变量sex是等长的, 对应元素分别为同一人的身高和性别, tapply()函数分男女两组计算了身高平均值

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数据类型
    • 数值型:用于直接计算加减乘除
      • 字符串型:可以进行连接,转换,提取等
        • 逻辑型:真或假
          • 日期型等
          • R对象
          • 向量、标量
            • 创建方式
              • 标量
                • 向量索引
                  • 正负整数索引
                  • 逻辑向量索引
                  • 名称索引
                • 修改向量
                  • 向量计算
                  • 矩阵matrix与数组
                    • 矩阵
                      • 数组
                        • 矩阵的索引
                          • 矩阵的计算
                          • 列表
                            • 创建
                              • 访问
                                • 赋值
                                  • 删除
                                  • 数据框
                                    • 创建
                                      • 访问
                                        • 单双括号的区别
                                        • 因子factor——用于统计分析
                                          • 因子
                                            • cut()函数
                                              • table()函数——统计频数
                                                • tapply()函数
                                                领券
                                                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档