数据-R语言-图表-决策-Linux-Python数据科学与R语言程序员

R语言入门

2017-10-06  本文已影响99人  songcmic

阅读原文

刚刚上完数据挖掘课程,两个星期上完了python爬虫,MySql的简单使用,机器学习,数据可视化等内容,内容很多而且上课时间很短,很难吸收所有的东西,而且最后的大作业就是用R Markdown写一份交互式分析报告,感觉压力山大,python爬虫和mysql问题不大,主要是R语言初次使用,学起来不是那么容易,争取在这国庆放假期间,抽空将R语言最常用的东西简单了解一下。

R的基本数据类型

# numeric类型
class(78) #查看数据的类型
class(3.1415)
as.integer(3.14) #将数据转换为integer型,还有as.double()
round(3.1415926,2) #取小数点后几位
# character类型
class('123')
as.numeric('123') #将字符串转换为数据类型
# factor #因子类型(都说这个类型很重要,由于我刚开始接触,目前并没有了解到它的真正用处)
as.factor('123')
v <‐ c('123','456','123','456') #赋值语句,函数c()用来创建向量,“<-”和“=”和“->”都可以用作赋值
a <‐ 1 ‐> b #结果是a = 1而且b = 1
rm(a,b) #移除变量a,b,在Rstudio中演示显而易见
class(v) 
as.factor(v)
levels(as.factor(v))
# date #日期类型
class("2017‐11‐11") #此时仍然是字符串
class(as.Date("2017‐11‐11")) #使用as.Date()将字符串转换为日期类型
as.Date("2017‐11‐11") + 1
# logical #逻辑类型,类似于其他语言的bool类型
class(TRUE)
TRUE == 1
T == TRUE
TRUE + FALSE
TRUE * FALSE

R的基本数据结构

# vector向量
v <‐ c(1,2,3) #函数c()用来创建向量
c(1,'a',TRUE)
length(v) #返回向量V中元素的个数,也就是向量的长度
v[1] #需要注意的是,R语言中的元素下标都是从1开始
v[2:3] #表示取V中的第2到第3个元素
v[‐1] #“-”表示去掉某个元素,这里表示将去掉第一个元素后的结果返回
1:10 #生成1到10的序列
seq(from=1,to=10,by=2) 
#seq()函数用来生成序列,常见的参数有from, to, by, length.out等
#常见用法有,from = a, to = b, by = step,这三个参数组合表示生成从a到b步长为setp的数列,包括a但不一定包括b
#还有from = a, by = step, length.out = len,这三个参数的组合表示生成从a开始步长为step,一共生成len个数,最后一个数为a+step*(len-1)
#还有from = a, to = b, length.out = len,用来将区间[a,b]分为len等分
seq(from=1,by=2,length.out=50)
letters #小写字母组成的向量
LETTERS #大写字母组成的向量
# dataframe 
class(iris)
iris
View(iris) #查看iris的数据
dim(iris) #iris的维度
nrow(iris) #行数
ncol(iris) #列数
colnames(iris) #每列的名字
iris$Sepal.Length #符号$查看某列
iris[,1]
iris[1,]
iris[1,1]
df <‐ data.frame(id=1:3,names=letters[1:3])
# matrix 矩阵
as.matrix(df) #将一个dataframe转换为矩阵 
as.data.frame(as.matrix(df))
mat <‐ matrix(1:16,nrow=4,byrow = T) #matrix()函数用来创建矩阵,生成1到16个数,分为四行,行优先排列
mat[2,3] #取矩阵中的元素
diag(mat)   #取矩阵的对角线元素
rowSums(mat) #矩阵的行数
colSums(mat) #矩阵的列数
sum(mat) #矩阵的和
mat[1,] %*% mat[,1] #符号%*%用作矩阵的乘法,对于向量即内积,而*表示矩阵元素对应相乘
mat %*% mat
# list
l <‐ list(v,df,mat)
l[[1]][1]
list(l,df)

R做数据整理

library(dplyr) #导入dplyr包
# 筛选
num <‐ c(1,4,‐8,7,5)
which(num < 0) #which()函数用来筛选元素,返回的是符合条件元素的下标
which(num > 0 & num < 2)
which(num < 0 | num > 5)
head(iris,20) #查看iris数据的前20行
iris[seq(1,10,2),]
iris[iris$Sepal.Length>5 & iris$Species=="setosa",]
iris[,c("Sepal.Length","Species")]
select(iris,Sepal.Length,Species) #select()选择函数,选择某些列
filter(iris,Sepal.Length>5,iris$Species=="setosa") #filter()过滤函数,过滤不符合条件的数据
# 排序
order(num) # 返回排序的索引值
order(num,decreasing = T)
sort(num) # 返回向量值本身
sort(num,decreasing = T)
iris[order(iris$Sepal.Length),]
iris[order(iris$Sepal.Length,iris$Sepal.Width),]
arrange(iris,Sepal.Length,desc(Sepal.Width))
# 行列变换
iris$v1 <‐ 1:nrow(iris)
colnames(iris)
iris$v1 <‐ NULL
colnames(iris)
mutate(iris,v1=1:nrow(iris),v2=1:nrow(iris)) #给iris新增某些列
iris[151,] <‐ c(3.8,7.2,6.9,4.1,"virginica")
iris <‐ iris[‐151,]
# 数据框的合并
rbind(iris,iris) %>% View #行合并 其中符号%>%是管道函数
cbind(iris,iris) %>% View #列合并
df1 <‐ data.frame(id1 = 1:10,let = letters[1:10])
df2 <‐ data.frame(id2 = 5:15,let_upper = LETTERS[5:15])
inner_join(df1,df2,by=c("id1"="id2")) #内连接
left_join(df1,df2,by=c("id1"="id2")) #左连接
right_join(df1,df2,by=c("id1"="id2")) #右连接
full_join(df1,df2,by=c("id1"="id2")) #全连接
library(reshape2)
iris_long <‐ melt(iris,id.vars="Species") #melt()拆分数据iris,使Species列保持不变,其它列以行的形式显示
dcast(iris_long,Species~variable,max) #重新合并数据,符号~表示以某某分组
iris_long$value <‐ as.numeric(iris_long$value)
aggregate(value~Species+variable,iris_long,mean)
iris_long %>% group_by(Species,variable) %>%
summarise(mean=mean(value),max=max(value),min=min(value),sd=sd(value),n=n())

基本统计分析

table(iris$Species)
iris$type <‐ sample(c("A","B","C"),nrow(iris),replace = T)
table(iris$type)
table(iris$Species,iris$type)
mean(iris$Sepal.Length) #均值
sd(iris$Sepal.Length) #标准差
var(iris$Sepal.Length) #方差
max(iris$Sepal.Length) #最大值
min(iris$Sepal.Length) #最小值
summary(iris$Sepal.Length) 
library(psych)
describe(iris[,1:4])
hist(iris$Sepal.Length)
boxplot(iris$Sepal.Length)
boxplot(iris$Sepal.Length~iris$Species)
cor(iris$Sepal.Length,iris$Sepal.Width)
cor(iris[,1:4])
library(corrplot)
corrplot(cor(iris[,1:4]), type="upper")
library(PerformanceAnalytics)
chart.Correlation(iris[,1:4])
plot(iris[,3],iris[,4])
mean(iris[,1])
t.test(iris[1:30,1],mu=5.8)
t.test(iris[1:30,1],mu=‐5.8)
sapply(iris[1:30,1:2],mean)
t.test(iris[1:30,1],iris[1:30,2],paired = T)

总结

刚刚接触R语言,虽然感觉语法简单,但是内容比较多比较杂,学起来并不容易,主要是因为需要记的东西太多,而不是一些框架模板,每一个函数,函数的参数都得记,十分不容易,这也没办法,R语言本身就是统计学用的一门语言,着重于某些具体功能的实现,比如求均值,方差,这就是一个函数,记住怎么用就行了,不需要我们去看它怎么做的,所以学R语言有种死记硬背的感觉。还可能今天记了明天忘了,想要掌握好还真不像其他语言一样就一两天的事。
阅读原文

上一篇下一篇

猜你喜欢

热点阅读