R语言的四种数据结构---向量

 

R中常用的数据结构有四种:向量、矩阵、数据库和列表

(1)基本操作

1.向量的创建

c()函数创建向量;seq()函数创建等差数列的向量;sample()从一列数字中随机抽取几个数;paste0()把数字和字符串有规律的组合起来

rm(list = ls())  #从指定的环境中删除对象
movie = read.csv("电影数据.csv", fileEncoding = "UTF-8", stringsAsFactors = F)


c(1, 1, 1, 2, 3, 3, 1, 2, 4, 1, 2, 4, 4, 2, 3, 4, 1, 2, 3, 4)
##   [1] 1 1 1 2 3 3 1 2 4 1 2 4 4 2 3 4 1 2 3 4
class(c)
#[1] "function"
c("a", "b", "c", "d")
##  [1] "a" "b" "c" "d"
# seq(起始值, 终止值, 步长)
seq(0, 10, by = 2) 
##  [1]  0  2  4  6  8 10
1:10
##   [1]  1  2  3  4  5  6  7  8  9 10
# sample(被抽取的数据集合, 抽取数量)
set.seed(1234)
sample(1:10, 5) 
##  [1] 2 6 5 8 9
paste0("x_", 1:5)
##  [1] "x_1" "x_2" "x_3" "x_4" "x_5"

2.向量的引用

which()函数可以获取某个元素的位置;which.max()和which.min()函数可以直接获取最大值和最小值的位置

# 引用x向量中的第5个元素
x=c(1, 1, 1, 2, 3, 3)
x[5]
##  [1] 3
# 想看看x向量中3所在的位置
which(x == 3)
##  [1] 5 6
which.max(x)
##  [1] 5
which.min(x)
##  [1] 1

3.集合运算

求交集intersect();求并集union();求差集setdiff();

intersect(c(1, 2, 3, 3, 12, 4, 123, 12), c(1, 2, 3))
##  [1] 1 2 3
union(c("狗熊会", "聚数据英才"), c("狗熊会", "助产业振兴"))
##  [1] "狗熊会"     "聚数据英才" "助产业振兴"
setdiff(10:2, 5:3)
##  [1] 10  9  8  7  6  2

(2)常见类型

1.数值向量的花式玩法

小函数 完成功能 使用方法
length 提取向量的长度 length(vector)
max 提取向量中的最大值 max(vector)
min 提取向量中的最小值

min(vector)

mean

提取向量的平均值 mean(vector)
quantile 提取向量的分位数 quantile(vector,prob=seq(0,1,0,25))
sort 将向量重新排序 sort(vector)
rank 返回向量x的秩,即x中数字的大小顺序 rank(vector)
order 返回一个向量升序排序后的数字在原数据中的位置 order(vector)
match 在y中逐个查找x,并返回在y中匹配的位置,若无返回NA match(vector)
cut 将数值型数据分区间转换成因子型数据,即将数值型数据离散化 cut(x,breaks,label)
median 提取向量的中位数 median(vector)

 

# match函数
x = c(1, 1, 1, 2, 3, 3, 1, 2, 4, 1, 2, 4, 4, 2, 3, 4, 1, 2, 3, 4)
(y = letters[x])  # letters是一个内置字符串,里面储存26个字母字符
##   [1] "a" "a" "a" "b" "c" "c" "a" "b" "d" "a" "b" "d" "d" "b" "c" "d" "a"
##  [18] "b" "c" "d"
match(y, letters[1:4])
##   [1] 1 1 1 2 3 3 1 2 4 1 2 4 4 2 3 4 1 2 3 4
# cut函数
# cut函数可以帮助我们完成一项数据分析的功能:连续数据离散化,也就是把连续型数据变成离散的定性数据来参与建模
(Age = sample(21:100, 20, replace = T))
##   [1] 72 21 39 74 62 76 64 43 94 44 87 43 42 35 39 46 45 33 24 38
# 将年龄数据离散化  
label = c('壮年', '中年', '长辈', '老年')  
(ages = cut(Age, breaks = c(20, 30, 50, 70, 100), labels = label))
##   [1] 老年 壮年 中年 老年 长辈 老年 长辈 中年 老年 中年 老年 中年 中年 中年
##  [15] 中年 中年 中年 中年 壮年 中年
##  Levels: 壮年 中年 长辈 老年

 sort默认升序,添加decreasing=T可使变为降序。

order函数能够输出把元向量升序排序后,每个排序后数据在原始向量中的位置,命令x[order(x)]的实现效果和sort(x)一样。

# sort和order函数
set.seed(1234)
(x = sample(8, 5))
##  [1] 1 5 4 6 7
sort(x)
##  [1] 1 4 5 6 7
sort(x,decreasing=T)
##  [1] 8 6 5 4 2
order(x)
##  [1] 1 3 2 4 5
x[order(x)]
##  [1] 1 4 5 6 7

 2.字符向量的花式玩法

# nchar用来提取字符串的长度
nchar("欢迎关注狗熊会")
##  [1] 7
# 看看数据集中的电影名字的长度分别是多少
nchar(movie$name)
##   [1]  3  3  7 12  5  5 12  7  8  4  5  7  4  4  6  4  4  3  2
# 中英文的字符长度计算方法有不同
nchar("Welcome to follow the CluBear")
##  [1] 29
# substr提取子字符串
substr("欢迎关注狗熊会", 1, 4)
##  [1] "欢迎关注"
substr("一懒众衫小", 3, 5)
##  [1] "众衫小"
# paste基本玩法
# collapse可以把一个向量内部的元素粘连起来,而sep则适用于把不同向量分别粘起来
paste(c("双11", "是个", "什么节日"), collapse = "")
##  [1] "双11是个什么节日"
paste("A", 1:4)
##  [1] "A 1" "A 2" "A 3" "A 4"
# paste花式玩法
paste(1:4, collapse = "")
##  [1] "1234"
paste(1:4, sep="")
##  [1] "1" "2" "3" "4"
paste("A", 1:4, sep="_")
##  [1] "A_1" "A_2" "A_3" "A_4"
paste(LETTERS[1:4], 1:4, collapse = "_")
##  [1] "A 1_B 2_C 3_D 4"
paste(LETTERS[1:4], 1:4, sep = "_", collapse = "|")
##  [1] "A_1|B_2|C_3|D_4"
paste(LETTERS[1:4], 1:4)
##  [1] "A 1" "B 2" "C 3" "D 4"
小函数 完成功能 使用方法
nchar 提取字符串的长度 nchar(vector0
substr 从字符串char1提取子字符串 substr(char1,begin,end)
paste 粘贴两个字符串 paste(char1,char2)
grep 查找字符向量x中字符串char1的位置 grep(char1,x)
gsub 将字符向量x中的字符char1替换为字符char2 gsub(char1,char2,x)

 

# grep返回movie的name中包含“青春”的行号8,movie[8, ]即提取出movie数据集的第8行
(index = grep("青春", movie$name))
##  [1] 8
(young = movie[index, ])
##              name boxoffice doubanscore type duration  showtime director
##  8 谁的青春不迷茫  17798.89         6.4 爱情      108 2016/4/22   姚婷婷
##     star1 index1  star2 index2
##  8 白敬亭  14759 郭姝彤    755
# 看看它的豆瓣评分和票房处于我们电影数据集中的什么位置
young$doubanscore > mean(movie$doubanscore)
##  [1] TRUE
young$boxoffice > mean(movie$boxoffice)
##  [1] FALSE

salary = c("22万", "30万", "50万", "120万", "11万")
(salary0 = gsub("万", "0000", salary))
##  [1] "220000"  "300000"  "500000"  "1200000" "110000"
mean(as.numeric(salary0))
##  [1] 466000
median(as.numeric(salary0))  # 结果是科学计数法的形式
##  [1] 3e+05

 

你可能感兴趣的:(R)