• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

R语言基础

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
向量的创建及操作

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,u)            建立一个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, "\n")

实用方法

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 + ...则定义了要划掉的、确定各列内容的变量集合。

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap