R数据分析-1
程序员文章站
2022-07-14 21:43:24
...
getwd()#显示当前工作目录
setwd () #修改当前工作目录
.libPaths()#查看该文件夹在计算机中的具体路径
install.packages(“stringr”) #安装包stringr
library(“stringr”)#载入包stringr
search() #显示已加载的包的列表
detach(“package:stringr”) #移除包stringr
remove.package(“package:stringr”) #卸载包stringr
尝试的部分运行
```r
getwd()
.libPaths()
install.packages("stringr")
library("stringr")
str_length("Hello R!")
search()
detach("package:stringr") #移除包
remove.package("package:stringr") #卸载包
#基本数据类型
num <-100;num
is.integer(num)#?
is.double(num)#?
typeof(num)
num2 <- 100L
typeof(num2)
is.logical(TRUE)
is.logical(T)
is.logical(5)#?
is.logical(0)#?
is.character("R program" )
#数据类型转换
logi_vec <- T
typeof(logi_vec)
int_vec <- c(100L, 200L)
typeof(int_vec)
#运算过程中,数据类型自动转换
2*T
10 + FALSE
exp(F)
10 & 0
10 | 0
#强制转换数据类型
as.logical(-10)
as.logical("T")
as.logical("F")
as.character(c(T,F,TRUE,FALSE))
as.character(10.99)
#特殊值
#NA,not available,表示缺失值
a <- 100
a[1] #?
a[2] #?
num_vec <- c(1,2)
length(num_vec) <- 4
num_vec
#Inf 无穷大
10/0
-10/0
#NaN, not a number,无意义的值
0/0
Inf -Inf
#NULL,表示空数据
num_vec1 <- c(1,5,NaN)
length(num_vec1)
num_vec2 <- c(1,5,NULL)
length(num_vec2)
#运算符
#逻辑运算符 & vs &&
logi_vec1 <- c(T,F,T)
logi_vec2 <- c(F,T,T)
logi_vec1 & logi_vec1 # ?
logi_vec1 && logi_vec2 # ?
logi_vec1 <- c(T,F,T) # 向量长度不同,短的循环补齐
logi_vec2 <- c(T,T,T,F)
logi_vec1 & logi_vec2 #?
logi_vec1 && logi_vec2 #?
logi_vec1 <- c(T,F,T)#验证:向量长度不同,短的循环补齐,长度为整数倍
logi_vec2 <- c(F,T,T,T,T,T)
logi_vec1 & logi_vec2 #?
logi_vec1 <- c(T,F,T,T,F,T) #验证:等价代码
logi_vec2 <- c(F,T,T,T,T,T)
logi_vec1 & logi_vec2 #?
#逻辑运算 | vs ||
logi_vec1 <- c(T,F,T)
logi_vec2 <- c(F,T,T)
logi_vec1 | logi_vec2
logi_vec1 || logi_vec2
#向量
vec <- c(2,3,4)
#访问元素
vec[1]
vec[0]
vec[2:3]
vec[2:5]
vec[c(1,3)] #访问不连续的怎么办?
vec[c(1,3,3)] #想重复访问
#添加元素
vec
vec <- c(vec[1:2],10,vec[3])
vec
#删除元素
vec
vec <- vec[-3]
vec
#获取向量长度
vec <- letters
vec
length(vec)
vec[-length(vec)]#删除x,y,z 怎么做?
vec[-length(vec):-length(vec)+2]
-length(vec):-length(vec)+2#注意加括号
-length(vec):(-length(vec)+2)
vec[-length(vec):(-length(vec)+2)]
#创建向量,
#Q:创建向量的方法
1:5
1:-5
#1,3,5,7,9, 创建等差数列
?seq
example(seq)
seq(1,9,by =2)
#将某向量重复多次,创建向量
vec <- 1:3
#1 2 3 1 2 3 1 2 3
?rep
example(rep)
rep(vec, 3)
#1 1 1 2 2 2 3 3 3
rep(vec, each = 3)
#创建长度为0的向量
new.vec <- c()
length(new.vec)
new.vec
install.packages("sample")
library("sample")
#判断某班级学生的年龄是不是都在18岁以上
stu <- sample(1:19,19, replace = F)
stu
stu >= 18
all(stu <=20)
stu <- sample(c(18,19),10,replace = T)
stu
all(stu >= 18)
#判断班级的学生的年龄是否都在18岁以下
stu <- sample(c(17,18,19),10,replace = T)
stu
any(stu<18)
stu <- sample(c(18,19),10,replace = T)
stu
any(stu<18)
#向量运算,算术运算,关系运算,逻辑运算
vec1 <- c(1,2)
vec2 <- c(10,20)
vec1 * vec2
vec1 == vec2
vec1 | vec2
#向量运算-循环补齐
vec1 <- c(1,2)
vec2 <- c(10,20,30)
vec1 + vec2
vec2 <- c(10,20,30,40)
vec1 + vec2
#向量元素筛选,找出向量中的偶数
vec <- 1:10
new.vec <- vec[vec%%2 == 0]
new.vec
vec%%2 == 0
vec[c(F,T,F,T,F,T,F,T,F,T)]#通过逻辑性向量筛选向量元素
vec < c(1:5,NA)
vec[vec%%2 == 0]
subset(vec, vec%%2 == 0)#希望结果中不要出现NA
#找出向量中的偶数下标
vec <- 5:8
which(vec %% 2 == 0)[1]
which(vec == 100)[1]
#寻找水仙花数
nums <- 100:999
first.num <- nums%/%100
second.num <- (nums%%100)%/%10
third.num <- nums%%10
nums[(first.num^3 + second.num^3 + third.num^3) == nums]
#矩阵
#矩阵创建
m <-matrix(1:8, nrow = 2)
#Q:按行创建矩阵
m <- matrix(1:8, nrow = 2, byrow = T)
m
matrix(c(1,5,2,6,3,7,4,8), nrow = 2)#byrow参数改变了数据
#矩阵运算
m1 <- matrix(1:4, nrow = 2)
m2 <- matrix(2:5, nrow = 2)
m1;m2
m1 + m2
m1 * m2
#矩阵运算,可以用循环补齐吗
m1 <- matrix(1:4, nrow = 2)
m2 <- matrix(2:7, nrow = 2)
m1;m2
m1 + m2
m1 <- matrix(1:4, nrow = 2)
m2 <- matrix(2:3, nrow = 1)
m1;m2
m1 + m2
#矩阵索引
m <- matrix(1:12, nrow = 4)
m
m[,2:3]
m[1:3,]#一定记得逗号
m[1:3]
m[1:5]
#访问矩阵的某行
m
m[1,]
#访问矩阵的某列
m
m[,2]
m[,1<=2]
#矩阵元素按条件筛选
m <- matrix(1:12, nrow = 4)
m
first.col <- m[,1]
first.col
first.col %% 2 == 0
m[first.col %% 2 == 0,]
m[first.col %% 2 == 0 & m[,2] > 6,]