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
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