R语言入门

作者: songcmic | 来源:发表于2017-10-06 13:58 被阅读99次

    阅读原文

    刚刚上完数据挖掘课程,两个星期上完了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语言有种死记硬背的感觉。还可能今天记了明天忘了,想要掌握好还真不像其他语言一样就一两天的事。
    阅读原文

    相关文章

      网友评论

        本文标题:R语言入门

        本文链接:https://www.haomeiwen.com/subject/owalyxtx.html