在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
向量的创建及操作 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) 读取数据库表
高级数据管理 (一)数学函数 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 + ...则定义了要划掉的、确定各列内容的变量集合。
|
请发表评论