R语言基础编程技巧汇编 - 9

1.      qq图的做法

qq图是正态分位数图,纵坐标是变量的取值,关键是横坐标。

qqplot全名应该是正态分位数图,横坐标的做法:

首先把变量按从小到大的顺序排列,计算变量的长度,即总共有多少个取值,再按顺序计算变量的所有取值的累积百分比,所谓的累积百分比,也就是可以看成是累积概率,比如有10个值,按照从小到大的顺序,第一个值的排序是1那么他的所占的百分比就是10%紧接着后一个值所占的百分比也会是10%,但是累积概率值为20%依次往后计算,因为最后一个值的累积百分比是100%,即等于1,这个值如果计算它的正态分布概率的分位数的话,是无限大的,因此需要对这个值进行修正一下,就是因为这一个值无限大,所以对全体计算出来的累积百分比减去一个适当小的数,修正后的累积百分比与原百分比相差不多,但是回避了最后一个值是1而无法计算的问题。

有了累积百分比之后,相对应的就是累积的概率值。将累积概率值修正后,即得到累积概率,比如以10个值为例,第一个值的累积概率为0.05,查正态分布表,0.05的累积概率,对应的正态分布的Z值为-1.64,这样一次计算,所得的Z值,就是qqplot的横坐标数据。下面以10个数据和30个数据为例说明。

my.qqplot <-function(y){

op <- par(mfrow= c(1, 1))

N <- length(y)

n <- seq(1, N)

xais <-qnorm((n - (.5*N) /N)/ N)

#####中间三句可选,只是为了输出计算过程######

mid <-cbind(sort(y), n, n/N, (n-(.5*N)/N)/N , xais)

colnames(mid)<- c("y", "rank", "cumpercent","adj-cumper","xaix")

print(mid)

#####中间三句可选,只是为了输出计算过程######

par(mfrow =c(2,1))

qqnorm(y)

plot(sort(y) ~xais, main = 'my qqplot')

par(op)

}

y <- rnorm(10,mean = 20, s = 50)

my.qqplot(y)

             y rankcumpercentadj-cumper      xaix

[1,]  2.877321  1       0.1      0.05 -1.6448536

[2,]  6.930063  2       0.2      0.15 -1.0364334

[3,]16.461444   3       0.3      0.25-0.6744898

[4,]36.130825   4       0.4     0.35 -0.3853205

[5,]40.477883   5       0.5     0.45 -0.1256613

[6,]50.534636   6       0.6     0.55  0.1256613

[7,]53.425025   7       0.7     0.65  0.3853205

[8,]54.554269   8       0.8     0.75  0.6744898

[9,]120.496268  9       0.9     0.85  1.0364334

[10,]125.290253  10       1.0     0.95  1.6448536

 

2.       read.csv读取一定数量的行

a=read.csv("C:/a.csv",nrows=500)

3.      数据高位用0补足

1100的一组数据,变成6位的数据,不足的用0来补,希望得到000001........000099000100,解决方法:

a<- sprintf("%06d",1:100)

 

4.      XML包抓取网页

library(XML)

dat = readLines("http://www.waaku.com/InfoView6792299.html")

doc = htmlTreeParse(dat, asText =TRUE, useInternalNodes =TRUE)

xpathSApply(xmlRoot(doc), "//div[@id='new6']",xmlValue)

5.      处理命令行参数

optparse包和getopt

6.       数据表中的变量访问方法

head(sleep)

 

   BodyWgt BrainWgt NonD Dream Sleep Span GestPred Exp Danger

1 6654.000   5712.0  NA    NA   3.3 38.6 645    3   5     3

2    1.000     6.6  6.3   2.0  8.3  4.5   42   3   1      3

3    3.385    44.5   NA    NA 12.5 14.0   60    1  1      1

4    0.920     5.7   NA    NA 16.5   NA   25   5   2      3

5 2547.000   4603.0 2.1   1.8   3.9 69.0 624    3   5     4

6   10.550   179.5  9.1   0.7  9.8 27.0  180    4  4      4

 

R语言自带的数据框sleep为例,访问sleep中第一列BodyWgt,有几种可能的方法:

1)中括号+列名带引号,即sleep['BodyWgt'],将得到一个类型为数据框的访问结果,如下所示:

sleep['BodyWgt']

    BodyWgt

1  6654.000

2     1.000

3     3.385

4     0.920

5  2547.000

6    10.550

 

str(sleep['BodyWgt'])

'data.frame':           62 obs.of  1 variable:

 $ BodyWgt: num  6654 1 3.38 0.92 2547 ...

 

方法1的变形是sleep[1],即访问sleep的第一列,得到的类型也是数据框。

 

2$+列名,即sleep$BodyWgt,列名不加引号,得到的数据类型是向量。

sleep$BodyWgt

 [1] 6654.000   1.000    3.385    0.920 2547.000   10.550

 

str(sleep$BodyWgt)

 num [1:62] 6654 1 3.38 0.92 2547 ...

 

3)中括号+双下标,即sleep[,1],意义为:访问第一列的所有的行,得到一个向量。

 

sleep[,1]

 [1] 6654.000    1.000   3.385    0.920 2547.000   10.550

 

str(sleep[,1])

 num [1:62] 6654 1 3.38 0.92 2547...

7.      时间格式

options(scipen=200)

t <- c(90000,93000,100000,102000)

tt=prettyNum(t,":",big.interval =2L)

strptime(tt,'%H:%M:%S')

 

8.      scale函数做数据中心化和标准化

scale()

 

9.      barplot上标出频数

x <- rep(1:4)

bp <- barplot(x)

text(bp,x/2,x)


10. rvest包网页抓取示例

下面用抓取豆瓣网电影数据为例,演示一下rvest包。

library(rvest)

 

url = 'http://movie.douban.com/top250?format=text'

web = html(url,encoding="UTF-8")

 

score =  html_text(web %>%html_nodes("span") %>% html_nodes("em"))

 

year =  web %>%html_nodes("p")

year=  html_text(year[seq(1,50,2)])

 

gy = gregexpr('[0-9]{4}',year)

gd = gregexpr("导演",year)

gz = gregexpr("主演",year)

 

time = sapply(1:length(gy),function(i)substr(year[i],gy[[i]],gy[[i]]+attr(gy[[i]],'match.length')-1))

direct = sapply(1:length(gy),function(i)substr(year[i],gd[[i]] + 4,gz[[i]] - 4))

actor = sapply(1:length(gy),function(i)substr(year[i],gz[[i]] + 4,gy[[i]] - 4))

ga = gregexpr('\n',actor)

actor = sapply(1:length(gy),function(i)substr(actor[i],1,ga[[i]] - 1))

 

names =   web %>%html_nodes("img") %>% html_attr("alt")

names =iconv(names,"utf-8","gbk")

 

rates =  html_text(web %>%html_nodes("span"))

rates = rates[grep("人评价",rates)]

rates = gsub("人评价","",rates)

 

head(names)

head(time)

head(score)

head(rates)

head(direct)

head(actor)

11. 显示数学公式

plot(0, 0, type = "n", axes = F,xlab="", ylab = "")

text(0, 0,bquote(italic(mu[tilde(s)[n]^2](s[n]^2))), cex = 12)

 

12. 图例加在图形框以外

plot(c(1,1), c(0.8,1.2), pch =20:21)

legend(0.6,1.27, c("A","B"), lty =1:2, pch =20:21,  ncol =2, bty ="n", xpd =TRUE)


13. 开n次方

X^(1/n)

14. rgl包绘制三维球体

library("rgl")

 

lat <- matrix(seq(90,-90, len=50)*pi/180,50, 50, byrow=TRUE)

long <- matrix(seq(-180, 180,len=50)*pi/180, 50, 50)

 

r <- 1

x <- -r*cos(lat)*cos(long)

y <- r*sin(lat)

z <- r*cos(lat)*sin(long)

 

open3d()

persp3d(x, y, z, col="white" )

 

 

15. 查看当前工作空间中有哪些变量

objects()

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值