zoukankan      html  css  js  c++  java
  • R语言基础

    向量的创建及操作
    
    c()                       创建向量
    length()                
    mode()                 判断向量的类型
    rbind()                  按行组合向量
    cbind()                 按列组合向量
    
    统计值:
    min() 
    max()
    sum()
    var()           方差
    mean() 
    sd()           标准差
    prod()        联乘
    
    判断是否为向量  is.vector(x)
    向量值的读取
    
    1:9*2-1  对1到9的值都乘以2并减1
    a[1:5]  读取向量a的前1到5个值
    a[c(3,5,9)] 读取向量a的3,5,9位置上的值   注意:一定要有c函数
    a[a>30 & a<=45] 读取向量a中大于30小于等于45的值
    
    序列向量产生:
    seq(5,20)  5到20的数列  公差为1
    seq(5,20,by=2) 5到20的数列  公差为2
    seq(5,121,length(10))  5到121的数列,长度为10,自动计算公差
    
    字符向量:
    letters[1:30]  letters 中是26个 字母,多余部分用NA填充
    
    which函数   获取指定方法下的数据的位置,如
    which.max(a)  获取向量a中的最大值的下标
    which(a==2) 获取向量a中等于2的下标
    which(a>5) 获取向量a大于5的下标
    
    rev() 函数   颠倒向量
    sort()函数   排序
    
    矩阵的创建及操作
    
    matrix(c(1:12),nrow=3,ncol=4)     1到12 的3行4列的矩阵
    
    matrix(c(1:12),nrow=3,ncol=4,byrow=TRUE) 选项byrow则表明矩阵应当按行填充(byrow=TRUE)还是按列填充(byrow=FALSE)
    
    矩阵的计算
    
    t()  矩阵转置 行变列,列变行
    a+b  矩阵相加,每个元素的值相加
    a-b  矩阵相减,每个元素的值相减
    a%*%b  矩阵相乘
    
    
    diag() 找出对角线上的值
    diag(a)  返回对角线上的值的向量
    diag(diag(a))返回对角线上的值的矩阵
    diag(4)    返回4阶的单位矩阵
    
    
    rnorm() 正态分布随机数,如rnorm(16) 按正态分布产生16的随机数
    matrix(rnorm(16),nrow=4,ncol=4) 产生16个正态随机数并组成4*4的矩阵
    solve(a)求矩阵的逆矩阵
    solve(a,b)求矩阵a和b的解
    
    eigen() 求矩阵的特征值
    如 a <- diag(4) +1 产生4阶单位矩阵并将元素加1
    a.e <- eigen(a,symmetric=TRUE)  求矩阵的特征值和特征向量
    
    数组(array)与矩阵类似,但是维度可以大于2。数组可通过array函数创建,形式如下:
    
    myarray <- array(vector,dimension,dimnames)
    
    其中vector包含了数组中的数据,dimensions是一个数值型向量,给出了各个维度下标的最大
    值,而dimnames是可选的、各维度名称标签的列表。
    
    像矩阵一样,数组中的数据也只能拥有一种模式。从数组中选取元素的方式与矩阵相同。
    
    数据框可通过函数data.frame()创建:
    
    mydata <- data.frame(col1,col2,col3,。。。。)其中的列向量col1, col2, col3,… 可为任何类型(如字符型、数值型或逻辑型)。每一列的
    名称可由函数names指定。
    
    数据集的操作
    
    1、合并数据集
    
    a、添加列  merge() cbind()
    
    用法: c3 <- merge(c1,c2,by={"id1","id2"})  两个数据框通过一个或多个共有的变量进行联接,inner join
    
    cbind(c1,c2)  横向合并对象c1和c2
    
    b、添加行 rbind  
    
    c3 <- rbind(dataframe1,dataframe2)
    
    两个数据框必须拥有相同的变量,不过它们的顺序不必一定相同。如果dataframeA中拥有
    dataframeB中没有的变量,请在合并它们之前做以下某种处理:
     删除dataframeA中的多余变量;
     在dataframeB中创建追加的变量并将其值设为NA(缺失)。
    纵向联结通常用于向数据框中添加观测。
    
    2、取子集
    a、选入变量 用法 dataframes[row indices,col indices]
    如取c1中的6到10个变量   c1[,6:10]
    
    b、删除变量方法
    myvar <- names(leadership) %in% c("q3","q4")
    newdata <- leadership[!myvar]
    
    过程:
    (1) names(leadership)生成了一个包含所有变量名的字符型向量: c("managerID","testDate","country","gender","age","q1", "q2","q3","q4","q5")。
    (2) names(leadership) %in% c("q3", "q4")返回了一个逻辑型向量,names(leadership)
    中每个 匹配q3或q4的元素的值为TRUE,反之为FALSE:c(FALSE, FALSE, FALSE, FALSE,FALSE, FALSE, FALSE, TRUE, TRUE, FALSE)。
    (3) 运算符非(!)将逻辑值反转:c(TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE,FALSE, TRUE)。
    (4) leadership[c(TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE,
    TRUE)]选择了逻辑值为TRUE的列,于是q3和q4被剔除了。
    
    在知道q3和q4是第8个和第9个变量的情况下,可以使用语句:
    newdata <- leadership[c(-8,-9)]
    
    将它们剔除。这种方式的工作原理是,在某一列的下标之前加一个减号()就会剔除那一列。
    末了,相同的变量删除工作亦可通过:
    leadership$q3 <- leadership$q4 <- NULL
    来完成。这回你将q3和q4两列设为了未定义(NULL)。注意,NULL与NA(表示缺失)是不同的。
    丢弃变量是保留变量的逆向操作。选择哪一种方式进行变量筛选依赖于两种方式的编码难易
    程度。如果有许多变量需要丢弃,那么直接保留需要留下的变量可能更简单,反之亦然。
    
    c、子集的获取
    newdata <- leadership[which(leadership$gender=="M" & leadership$age >30 )]
    
    最简单的方法:subset()
    
    newdata <- subset(leadership,age >=45 | age <24 ,select=c(q1,q2,q3,q4))
    newdata <- subset(leadership,age >=45 | age <24 ,select=gender:q4)
    
    数据抽样
    
    mysample <- leadership[sample(1:nrow(leadership),m,replace=TRUE),]
    
    
    sample()函数中的第一个参数是一个由要从中抽样的元素组成的向量。在这里,这个向量是1到数据框中观测的数量,第二个参数是要抽取的元素数量,第三个参数表示无放回抽样。
    sample()函数会返回随机抽样得到的元素,之后即可用于选择数据框中的行。
    
    使用SQL操作数据框
    
    导入sqldf包后,可以使用SQL方式操作数据,如:
    newdf <- sqldf("select * from mtcars where am=1 order by mpg",row.names=TRUE)参数row.names=TRUE将原始数据框中的行名延续到了新数据框中
    
    使用键盘输入数据
    (1)创建一个空数据框:mydataframe <- data.frame(age=numeric(0),gender=character(0))
      (2)调用文本编辑器 mydataframe<- edit(mydataframe) 其中需要赋值到原变量中,简单写法fix(mydataframe)
    
    读取带分隔符的文本文件
    mydataframe <- read.table(file,heder=logic_value,sep="delimiter",rowname="name")
    
    file是一个带分隔符的ASCII文本文件,header是一个表明首行是否包含了变量名的逻辑值(TRUE或FALSE),sep用来指定分隔数据的分隔符,row.names是一个可选参数,用以指定一个或多个表示行标识符的变量。
    
    
    
    读取Excel 
    library(RODBC)
    z <- odbcConnectExcel("C:\rtest\mytest.xlsx")
    w <- sqlFetch(z,"Sheet1")
    odbcClose(z)
    
    
    
    读取数据库表
    

      
    函数                                                  描述   
    odbcConnect(dsn,uid="",pwd="")            建立一个ODBC到数据的连接   
    sqlFetch(channel,sqltable)                       读取ODBC数据库中的某一个表到一个数据框中   
    sqlQuery(channel,query)                         向ODBC数据库提交一个查询并反回结果   
    sqlSave(channel,mydf,tablename=sqltable,append=FALSE)          将数据框写入或更新(append=TRUE)到ODBC数据库的某个表中   
    sqlDrop(channel,sqltable)                        删除ODBC中的某个表   
    close(channel)                                       关闭连接 


    操作过程:
    library(RODBC)
    channel <- odbcConnect("sigbi","etl","etl_etl213")
    etlinterface <- sqlFetch(channel,etl_interface)       将表etl_interface复制到数据框etlinterface
    fundata <- sqlQuery(channel,"select * from etl_l_log")
    close(channel)

    高级数据管理

    (一)数学函数 abs(x) 绝对值        abs(-4)返回值为4 sqrt(x) 平方根       sqrt(25)返回值为5和25^(0.5)等价 ceiling(x) 不小于x的最小整数     ceiling(3.475)返回值为4 floor(x) 不大于x的最大整数   floor(3.475)返回值为3 trunc(x) 向 0 的方向截取的x中的整数部分trunc(5.99)返回值为5 round(x, digits=n) 将x舍入为指定位的小数    round(3.475, digits=2)返回值为3.48 signif(x, digits=n) 将x舍入为指定的有效数字位数   signif(3.475, digits=2)返回值为3.5 cos(x)、sin(x) 、tan(x) 余弦、正弦和正切   cos(2)返回值为–0.416 acos(x) 、asin(x) 、atan(x) 反余弦、反正弦和反正切   acos(-0.416)返回值为2 cosh(x) 、sinh(x) 、tanh(x) 双曲余弦、双曲正弦和双曲正切  sinh(2)返回值为3.627 acosh(x) 、asinh(x) 、atanh(x) 反双曲余弦、反双曲正弦和反双曲正切  asinh(3.627)返回值为2 log(x,base=n) log(x) log10(x)  对x取以n为底的对数 为了方便起见log(x)为自然对数log10(x)为常用对数 如log(10)返回值为2.3026log10(10)返回值为1 exp(x) 指数函数 exp(2.3026)返回值为10

    (二)数据统计函数 mean(x) 平均数 mean(c(1,2,3,4))返回值为2.5  mean(x,trim=0.05,na.rm=TRUE) 丢弃了最大5%和最小5%的数据和所有缺失值后的算术平均数 median(x) 中位数  median(c(1,2,3,4))返回值为2.5 sd(x) 标准差 sd(c(1,2,3,4))返回值为1.29 var(x) 方差  var(c(1,2,3,4))返回值为1.67 mad(x) 绝对中位差(median absolute deviation) mad(c(1,2,3,4))返回值为1.48 quantile(x,probs) 求分位数。其中x为待求分位数的数值型向量,probs为一个由[0,1]之间的概率值组成的数值向量 # 求x的30%和84%分位点 y <- quantile(x, c(.3,.84)) range(x) 求值域  x <- c(1,2,3,4) range(x)返回值为c(1,4) diff(range(x))返回值为3 sum(x) 求和   sum(c(1,2,3,4))返回值为10 diff(x, lag=n) 滞后差分,lag用以指定滞后几项。默认的lag值为1 x<- c(1, 5, 23, 29)  diff(x)返回值为c(4, 18, 6) min(x) 求最小值  min(c(1,2,3,4))返回值为1 max(x) 求最大值  max(c(1,2,3,4))返回值为4 scale(x,center=TRUE,scale=TRUE)  为数据对象x按列进行中心化(center=TRUE)或标准化(center=TRUE,scale=TRUE)

    数据的标准化

    默认情况下,函数scale()对矩阵或数据框的指定列进行均值为0、标准差为1的标准化 newdata <- scale(mydata)

    可以标准想要的数据,如标准差为SD,均值为M的数据,如下: newdata <- scale(mydata)*SD+M

    概率函数

    d = 密度函数(density) p = 分布函数(distribution function) q = 分位数函数(quantile function) r = 生成随机数(随机偏差)

    分布名称           缩 写          分布名称               缩 写 Beta分布           beta            Logistic分布          logis 二项分布           binom          多项分布               multinom 柯西分布           cauchy         负二项分布             nbinom (非中心)卡方分布 chisq          正态分布               norm 指数分布           exp            泊松分布               pois F分布              f              Wilcoxon符号秩分布     signrank Gamma分布          gamma          t分布                  t 几何分布           geom           均匀分布               unif 超几何分布         hyper          Weibull分布            weibull 对数正态分布       lnorm          Wilcoxon秩和分布       wilcox

    生成服从正态分布的伪随机数 runif(5)  生成5个0~1之间满足正态分布的随机数 ,每次生成结果会不一样,如果想生成一样的值,需要指定同一个随机种子 set.seed(1234) runif(5)

    多元正态分布 library(MASS) options(digtis=3) set.seed(1234) mean <- c(230.7,146.7,3.6) sigma <- matrix(c(15360.8,6721.2,-47.1,6721.2,4700.9,-16.5,-47.1,-16.5,0.3),nrow=3,ncol=3) mydata <- mvrnorm(500,mean,sigma) mydata <- as.data.frame(mydata) names(mydata) <- c("y","x1","x2")

    (三)字符处理函数

    nchar(x) 计算x中的字符数量x <- c("ab", "cde","fghij")length(x)返回值为 3 (参见表5-7)nchar(x[3])返回值为5

    substr(x, start, stop) 提取或替换一个字符向量中的子串 x <- "abcdef" substr(x, 2, 4)返回值为"bcd" substr(x, 2, 4) <- "22222"(x将变成"a222ef") grep(pattern, x, ignore. case=FALSE,fixed=FALSE)在x中搜索某种模式。若fixed=FALSE,则pattern为一个正则表达式。若fixed=TRUE,则pattern为一个文本字符串。返回值为匹配的下标 grep("A",c("b","A","c"),fixed=TRUE)返回值为2

    sub(pattern, replacement, x,ignore.case=FALSE, fixed=FALSE) 在x中搜索pattern,并以文本replacement将其替换。若fixed=FALSE,则pattern为一个正则表达式。若fixed=TRUE,则pattern为一个文本字符串 sub("\s",".","Hello There")返回值为Hello.There。 注意,"s"是一个用来查找空白的正则表达式;使用"\s"而不用""的原因是,后者是R中的转义字符

    strsplit(x, split, fixed=FALSE)

    在split处分割字符向量x中的元素。若fixed=FALSE,则pattern为一个正则表达式。若fixed=TRUE,则pattern为一个文本字符串 y <- strsplit("abc", "")将返回一个含有1个成分、3个 元素的列表,包含的内容为"a" "b" "c" unlist(y)[2]和sapply(y, "[", 2)均会返回"b"

    paste(…, sep="") 连接字符串,分隔符为sep paste("x", 1:3,sep="")返回值为c("x1", "x2", "x3") paste("x",1:3,sep="M")返回值为c("xM1","xM2" "xM3") paste("Today is", date())返回值为Today is Thu Jun25 14:17:32 2011

    toupper(x)大写转换    toupper("abc")返回值为"ABC" tolower(x) 小写转换   tolower("ABC")返回值为"abc"

    (四)实用函数 length(x) 对象x的长度  x <- c(2, 5, 6, 9)  length(x)返回值为4

    seq(from, to, by) 生成一个序列  indices <- seq(1,10,2) indices的值为c(1, 3, 5, 7, 9) rep(x, n) 将x重复n次y <- rep(1:3, 2)y的值为c(1, 2, 3, 1, 2, 3) cut(x, n) 将连续型变量x分割为有着n个水平的因子使用选项ordered_result = TRUE以创建一个有序型因子 pretty(x, n) 创建美观的分割点。通过选取n+1个等间距的取整值,将一个连续型变量x分割为n个区间。绘图中常用 cat(... , file ="myfile",append =FALSE) 连接...中的对象,并将其输出到屏幕上或文件中(如果声明了一个的话) firstname <- c("Jane") cat("Hello" ,firstname, " ")

    实用方法

    R中提供了一个apply()函数,可将一个任意函数“应用”到矩阵、数组、数据框的任何维度上。apply函数的使用格式为:

    apply(x,MARGIN,FUN,...)  其中,x为数据对象,MARGIN是维度的下标,FUN是由你指定的函数,而...则包括了任何想传递给FUN的参数。在矩阵或数据框中,MARGIN=1表示行,MARGIN=2表示列。

    自定义函数

    ifelse(cond,statment1,statment2) 结果为二元时可以简单实用

    自定义函数

    myfunction <- function(arg1,arg2,.....) { statments return(object) } 函数中的对象只在函数内部使用。返回对象的数据类型是任意的,从标量到列表皆可。

    使用函数warning()来生成一条错误提示信息,用message()来生成一条诊断信息,或用stop()停止当前表达式的执行并提示错误。

     整合数据

    aggregate() 函数 使用一个或多个by变量和一个预先定义好的函数来折叠(collapse)数据:

    aggregate(x,by,FUN)   ,by中的变量必须在一个列表中(即使只有一个变量)。

    其中x是待折叠的数据对象,by是一个变量名组成的列表,这些变量将被去掉以形成新的观测,而FUN则是用来计算描述性统计量的标量函数,它将被用来计算新观测中的值。按指定的by中的列表求fun中的值。

    reshape()包

    1. 融合 数据集的融合是将它重构为这样一种格式:每个测量变量独占一行,行中带有要唯一确定这个测量所需的标识符变量。

    library(reshape) md <- melt(mydata,id=(c("id","time")))

    2. 重铸 cast()函数读取已融合的数据,并使用你提供的公式和一个(可选的)用于整合数据的函数将其重塑

    newdata <- cast(md,formula,FUN)

    其中的md为已融合的数据,formula描述了想要的最后结果,而FUN是(可选的)数据整合函数。其接受的公式形如:

    rowvar1+rowvar2+.....~colvar1+colvar2+.....

    在这一公式中,rowvar1 + rowvar2 + ...定义了要划掉的变量集合,以确定各行的内容,而colvar1 + colvar2 + ...则定义了要划掉的、确定各列内容的变量集合。

  • 相关阅读:
    Objective C 代码片段(类别)
    误释放对象
    浏览器内核信息整理
    Oracle VM Virtual 下CentOS不能自动获取IP地址
    git 命令归纳
    马蜂窝 iOS App 启动治理:回归用户体验
    马蜂窝火车票系统服务化改造初探
    让前端监控数据采集更高效
    状态机在马蜂窝机票订单交易系统中的应用与优化实践
    马蜂窝张矗:我对技术团队绩效考核管理的几点思考
  • 原文地址:https://www.cnblogs.com/tychyg/p/5069206.html
Copyright © 2011-2022 走看看