采编自DataMiningWithR
R.version #查看R的版本信息
开启R的旅程 Starting with R
install.packages('DMwR') #下载工具包
remove.packages('C50') #删除工具包
library('DMwR') #加载工具包
require('DMwR')#同上
#同时加载多个工具包
lb = c('ggplot2','VIM','dplyr','pROC')
lapply(lb,require,character.only = T)
# 若加载失败则下载,避免重复下载
if(!require('DMwR'))(
install.packages('DMwR')
)
installed.packages() #查看所有已下载的工具包的详细信息
(.packages())#查询当前工作环境下加载的工具包
old.packages() #查看哪些工具包需要更新
update.packages() #更新工具包
setwd("D:/R-progress/Chapter 1") #设定工作路径
getwd() #获取当前工作路径
sessionInfo() #获取当前环境的配置信息
?? knnImputation() # 查看帮助
操作对象 Objects
x <- 945;x
y <- 39;y
y <- 43;y
z <- 5
w <- z^2;w
w <- z%/%2;w #除法取整
w <- z%%2;w #除法取余
i <- (z*2 + 45)/6;i
ceiling(i);floor(i);round(i,digits = 3)
(34 + 90)/12.5
ls() #获取当前环境下的环境变量
rm(y) #删除环境变量y
rm(z,w,i)#删除多个环境变量
rm(list = ls()) #删除所有环境变量
向量 vectors
v <- c(4,7,23.5,76.2,80);v
length(v)
class(v);mode(v) #变量类型
v <- c(4,7,23.5,76.2,80,"rrt");v
class(v)
u <- c(4,6,NA,2);u;mode(u)
k <- c(T,F,NA,TRUE);k;mode(k)
v;v[2]
v[1] <- 'hello';v
x <- vector();x
x[3] <- 45;x
length(x)
x[10];x
x[5] <- 4;x
v <- c(45,243,78,343,445,44,56,77);v
v <- c(v[5],v[7]);v
x <- sqrt(v);x #获取向量中每个元素的算术平方根
y <- x^(1/4);y #获取向量中每个元素的1/4次方
v1 <- c(4,6,87)
v2 <- c(34,32.4,12)
v1+v2
v1 <- c(4,6,8,24)
v2 <- c(10,2)
v1+v2
v1 <- c(4,6,8,24)
2*v1
因子 Factors
g <- c('f','m','m','m','f','m','f','m','f','f');g;class(g)
g <- factor(g);g
other.g <- factor(c('m','m','m','m','m'),levels=c('f','m'));other.g
table(g)
table(other.g)
a <- factor(c('adult','adult','juvenile','juvenile','adult','adult',
'adult','juvenile','adult','juvenile'))
t <- table(a,g);t
margin.table(t,1)
margin.table(t,2)
prop.table(t,1)
prop.table(t,2)
prop.table(t)
生成序列Generating sequences
x <- 1:1000
10:15-1
10:(15-1)
5:0
seq(-4,1,0.5)
# [1] -4.0 -3.5 -3.0 -2.5 -2.0 -1.5 -1.0 -0.5 0.0 0.5 1.0
seq(from=1,to=5,length=4)
# [1] 1.000000 2.333333 3.666667 5.000000
seq(from=1,to=5,length=2)
# [1] 1 5
seq(from=-2,by=.2,length=10)
# [1] -2.0 -1.8 -1.6 -1.4 -1.2 -1.0 -0.8 -0.6 -0.4 -0.2
rep(5,10)
rep('hi',3)
rep(1:2,3)
# [1] 1 2 1 2 1 2
rep(1:2,each=3)
# [1] 1 1 1 2 2 2
gl(3,5)
# [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
gl(2,5,labels=c('female','male'))
# [1] female female female female female male male male male male
# Levels: female male
rnorm(10)
rnorm(100) %>% shapiro.test() #生成100个均值为0方差为1的随机数并判断是否符合正态分布,此函数生成的随机数较少时,有可能不符合正态分布
rnorm(4,mean=10,sd=3)
标签 Indexing
x <- c(0,-3,4,-1,45,90,-5)
x > 0 #对向量中的每个元素进行判断
# [1] FALSE FALSE TRUE FALSE TRUE TRUE FALSE
# 获取符合筛选条件的元素
x[x>0]
x[x <= -2 | x > 5]
x[x > 40 & x < 100]
#根据元素在向量中的位置提取相应的元素
x[c(4,6)]
x[1:3]
y <- c(1,4)
x[y]
#根据元素在向量中的位置删除相应的元素
x[-1]
x[-c(4,6)]
x[-(1:3)]
pH <- c(4.5,7,7.3,8.2,6.3);pH
names(pH) <- c('area1','area2','mud','dam','middle');pH
pH <- c(area1=4.5,area2=7,mud=7.3,dam=8.2,middle=6.3);pH
#根据名称提取相应的元素
pH['mud']
pH[c('area1','dam')]
pH[!(names(pH) %in% c('area1','dam'))] # '%in%'表示判断前者元素是否在后者范围中,返回'TRUE'和'FALSE','!'表示否定,即反义,与'%in%'合用表示不在其中的元素
矩阵和数组 Matrices and Arrays
m <- c(45,23,66,77,33,44,56,12,78,23);m
dim(m) <- c(2,5);m
m <- matrix(c(45,23,66,77,33,44,56,12,78,23),2,5);m
m <- matrix(c(45,23,66,77,33,44,56,12,78,23),2,5,byrow=T);m
m[2,3]
m[1,-c(3,5)]
m[1,]
m[,4]
m[1,,drop=F]
m[,4,drop=F]
m1 <- matrix(c(45,23,66,77,33,44,56,12,78,23),2,5);m1
cbind(c(4,76),m1[,4])
m2 <- matrix(rep(10,20),4,5);m2
m3 <- rbind(m1[1,],m2[3,]);m3
results <- matrix(c(10,30,40,50,43,56,21,30),2,4,byrow=T);results
colnames(results) <- c('1qrt','2qrt','3qrt','4qrt')
rownames(results) <- c('store1','store2')
results
results['store1',]
results['store2',c('1qrt','4qrt')]
a <- array(1:24,dim=c(4,3,2));a
a[1,3,2]
a[1,,2]
a[4,3,]
a[c(2,3),,-2]
m <- matrix(c(45,23,66,77,33,44,56,12,78,23),2,5);m
m*3
m1 <- matrix(c(45,23,66,77,33,44),2,3);m1
m2 <- matrix(c(12,65,32,7,4,78),2,3);m2
m1+m2
m1*m2
列表 Lists
my.lst <- list(stud.id=34453,
stud.name="John",
stud.marks=c(14.3,12,15,19));my.lst
# 双中括号表示提取对应的元素
my.lst[[1]]
my.lst[[3]]
#单中括号表示包含元素的名称
my.lst[1]
mode(my.lst[1])
mode(my.lst[[1]])
my.lst$stud.id #同my.lst[,'stud.id']
names(my.lst)
names(my.lst) <- c('id','name','marks') #重命名
my.lst
# 可添加新的变量,$后为变量的名称,c()为变量的内容
my.lst$parents.names <- c("Ana","Mike")
my.lst
length(my.lst)
my.lst <- my.lst[-5];my.lst
other <- list(age=19,sex='male')
lst <- c(my.lst,other);lst #合并两个list
unlist(my.lst) %>% mode() #破坏列表结构,成为向量
数据框 Data Frames
my.dataset <- data.frame(site=c('A','B','A','A','B'),
season=c('Winter','Summer','Summer','Spring','Fall'),
pH = c(7.4,6.3,8.6,7.2,8.9));my.dataset
my.dataset[3,2]
my.dataset$pH
# 设定一定的条件,提取数据子集
my.dataset[my.dataset$pH > 7,]
my.dataset[my.dataset$site == 'A','pH']
my.dataset[my.dataset$season == 'Summer',c('site','pH')]
subset(my.dataset,pH > 8)
subset(my.dataset,season == 'Summer',season:pH)
my.dataset[my.dataset$season == 'Summer','pH'] <-
my.dataset[my.dataset$season == 'Summer','pH'] + 1
my.dataset
my.dataset$NO3 <- c(234.5,256.6,654.1,356.7,776.4);my.dataset
nrow(my.dataset)
ncol(my.dataset)
names(my.dataset)
names(my.dataset) <- c("area","season","pH","NO3" )
my.dataset
names(my.dataset)[4] <- "PO4"
my.dataset
构造简单函数 Creating New Functions
# 基本就是这么个模式
myfunction <- function(arg1,arg2,...){
statements
return(object)
}
# 例 1
se <- function(x) { # function()为定义的输入参数,包括对象
v <- var(x) #求方差
n <- length(x) #求元素的个数
return(sqrt(v/n)) #返回方差除以元素个数的算术平方根,即标准误差
}
se(c(45,2,3,5,76,2,4))
# 例 2
basic.stats <- function(x,more=F) { # 'mode = F' 为判断语句,若为'mode = T',则执行某项操作
stats <- list() #构建空列表
clean.x <- x[!is.na(x)] #删除缺失值
stats$n <- length(x) #统计元素个数,并作为变量n添加至空列表中
stats$nNAs <- stats$n-length(clean.x) #获取缺失值的个数,添加到列表中
stats$mean <- mean(clean.x) #获取真实值的均值
stats$std <- sd(clean.x) #获取真实值的标准偏差
stats$med <- median(clean.x) #获取真实值的中值
if (more) { #若为'mode = T',则执行下列操作
stats$skew <- sum(((clean.x-stats$mean)/stats$std)^3)/length(clean.x)
stats$kurt <- sum(((clean.x-stats$mean)/stats$std)^4)/length(clean.x) - 3
}
unlist(stats)
}
basic.stats(c(45,2,4,46,43,65,NA,6,-213,-3,-45))
basic.stats(c(45,2,4,46,43,65,NA,6,-213,-3,-45),more=T)
# 例 3
# 让我们重温下小学数学知识
f <- function(x) {
for(i in 1:10) {
res <- x*i
cat(x,'*',i,'=',res,'\n')
}
}
f(10)
# 3 * 1 = 3
# 3 * 2 = 6
# 3 * 3 = 9
# 3 * 4 = 12
# 3 * 5 = 15
# 3 * 6 = 18
# 3 * 7 = 21
# 3 * 8 = 24
# 3 * 9 = 27
# 3 * 10 = 30
网友评论