• R语言
  • 发个学习贴,新手可以进来看看一些问题的理解

20.format格式的用法

这个东西我在实战中学到的,下面的例子只是结合了因子分析就有很大威力了,也许这个格式设置还有更多好用的地方:

看链接,

http://cos.name/cn/topic/109861

我仅代表自己感谢一下不嫌弃新手的人,能把复杂的东西简单详细讲出来的人,以后定是人品好的实力强的高手!谢谢分享!

回复 第31楼 的 20121024:谢谢支持,大家都奔跑在通往大神的路上吧!

21.sub()与gsub()函数

这个sub是只匹配到一个替换就结束了么?还是用gsub,如果针对1,222,333.12的数字,sub还可以么?

刚才实验下果然还是用gsub好:

R>sub(',','','1,222,333.12')

[1] "1222,333.12"

R>gsub(',','','1,222,333.12')

[1] "1222333.12"

主要就是替换的命令,当然还有其他方法,例如strsplit()函数,具体这些方法怎么被需求的,可以看下:

http://cos.name/cn/topic/107273?replies=11#post-244845

22.readLines命令

没什么好说的,只需要提醒新手们,readlines不行!readLines才行!注意R区分大小写。。。

大家也可以看看这个问题,加深下学习:

http://cos.name/cn/topic/109872?replies=6#post-244857

17 天 后

23.which与length函数结合

一些简单函数的组合使用,往往可以收到一些好的效果:

http://cos.name/cn/topic/110092?replies=3#post-245787

24.factor函数用于矩阵数据类型的转换

http://cos.name/cn/topic/110095?replies=11#post-245885

25.as.Date()函数

我们会在数据分析中经常遇到时间日期的问题,这里有个帖子简单介绍了它的用法:

http://cos.name/cn/topic/110123?replies=5#post-245908

回复 第9楼 的 Peter Chen:我一开始写代码的习惯就是运算符号两侧都加空格,而构造向量的冒号两侧不加空格,所以直观上比较容易理解“1:n - 1”会优先计算向量构造,然后才算减法。

26.strsplit(),paste0()函数

由于因子的方法对我们解决很多归类什么的问题非常有用而且高效,因此对因子格式的了解和熟悉就非常重要,这里贴出一个新手进阶贴,通过此帖应该可以激发大家的一些自定义设定因子完成自己所需的思路:

http://cos.name/cn/topic/110133?replies=9#post-245986

主要思路是:通过裁剪变换然后粘贴回去,把因子的格式变成我们需要的。

27.which()函数进阶

前面讲过例如:

R>vm=c(3,1,2,4,6)<br />
R>which(vm%%3==0)<br />
[1] 1 5


这个当VM是向量时的情况,返回了INDEX,但是我们看看矩阵的情况:
R>m=matrix(1:12,3,4)<br />
R>m<br />
     [,1] [,2] [,3] [,4]<br />
[1,]    1    4    7   10<br />
[2,]    2    5    8   11<br />
[3,]    3    6    9   12<br />
R>which(m%%3==0)<br />
[1]  3  6  9 12<br />
R>which(m%%3==0,arr.ind=TRUE)<br />
     row col<br />
[1,]   3   1<br />
[2,]   3   2<br />
[3,]   3   3<br />
[4,]   3   4


我们看到直接用which只返回矩阵中那些被3整除的值,不返回INDEX,加了参数arr.ind=TRUE(很好记,就是array.index的简写嘛,记是这样记,打还必须是代码里的)就可以了
</p>

28.order()函数进阶

先做好一些准备:

R>x=c(1,2,1,3,2,5)<br />
R>y=c(1,3,2,4,2,6)<br />
R>z=c(1:6)<br />
R>a=rbind(x,y,z)<br />
R>a<br />
  [,1] [,2] [,3] [,4] [,5] [,6]<br />
x    1    2    1    3    2    5<br />
y    1    3    2    4    2    6<br />
z    1    2    3    4    5    6<br />
R>class(a)<br />
[1] "matrix"


这个时候如果我们想要对a这个矩阵按照x的升序排列,怎么办?
R>ii=order(x,y,z)<br />
R>a[,ii]<br />
  [,1] [,2] [,3] [,4] [,5] [,6]<br />
x    1    1    2    2    3    5<br />
y    1    2    2    3    4    6<br />
z    1    3    5    2    4    6


大家注意到这个时候a就按x升序排了,y,z的值全都是对应的

如果是按x降序呢?
R>iii=order(-x,y,z)<br />
R>a[,iii]<br />
  [,1] [,2] [,3] [,4] [,5] [,6]<br />
x    5    3    2    2    1    1<br />
y    6    4    2    3    1    2<br />
z    6    4    5    2    1    3


其实大家到这里仔细看看上面2个排序后的y,z,就会注意到,order(x,y,z)这里的排序,是先对x从小到大排,排完后,在x相同的值里面,再按y从小到大排,同理order(-x,y,z),那么,现在大家可以想想order(x,-y,z)又是什么意思呢?哈哈

到了这里,大家基本上就了解了order()了,下面再说下,如果a里面有NA怎么办?(NA与NULL见学习帖1)

先做些准备:
R>a=c(1,3,2,NA)<br />
R>b=c(NA,2,4,7)<br />
R>c=cbind(a,b)<br />
R>c<br />
      a  b<br />
[1,]  1 NA<br />
[2,]  3  2<br />
[3,]  2  4<br />
[4,] NA  7<br />
R>class(c)<br />
[1] "matrix"


这里新手们也可以看看rbind,cbind的区别

我们先看默认情况:
R>ii=order(a,b)<br />
R>c[ii,]<br />
      a  b<br />
[1,]  1 NA<br />
[2,]  2  4<br />
[3,]  3  2<br />
[4,] NA  7<br />
R>


再看加参数的情况:
R>iii=order(a,b,na.last=FALSE)<br />
R>c[iii,]<br />
      a  b<br />
[1,] NA  7<br />
[2,]  1 NA<br />
[3,]  2  4<br />
[4,]  3  2<br />
R>iiii=order(a,b,na.last=NA)<br />
R>c[iiii,]<br />
     a b<br />
[1,] 2 4<br />
[2,] 3 2<br />
R>


好了,到了这里,order()这个函数大家应该都比较熟悉了,便于以后我们对数据矩阵进行精确控制,毕竟大多数时候我们分析的对象都是数据矩阵嘛!
</p>

29.sort()函数进阶

这里贴出一个帖子,然后弄清楚要做什么之后,看看14楼的代码

http://cos.name/cn/topic/110139#post-246053

17 天 后

30.几个编辑命令

首先,在R-console中我们可以在"help"->"console"里找到这一帮助文档,里面很全:

我列几个常用的:

1)ctrl+L 清空控制台

2)ctrl+U 清空光标所在的当前行

3)ctrl+DEL 清空光标所在处直行尾

回复 第13楼 的 iamstomach:

<br />
> for(i in 1:3){<br />
+ print("select ",i)<br />
+ }<br />
[1] "select "<br />
[1] "select "<br />
[1] "select "<br />
> for(i in 1:3){<br />
+ print(paste("select ",i))<br />
+ }<br />
[1] "select  1"<br />
[1] "select  2"<br />
[1] "select  3<br />


看来R的print函数还真是奇怪,要循环输出i,还必须借助paste
</p>

回复 第17楼 的 superdesolator:

<br />
> d[order(d$ages),]<br />
  kids ages<br />
2    b    0<br />
1    a    2<br />
3    c    4<br />
> d[,order(d$ages)]<br />
Error in <code>[.data.frame</code>(d, , order(d$ages)) : undefined columns selected<br />


只能调用行,却无法调用列。不知为何
</p>

回复 第18楼 的 superdesolator:只需要一个"\n"即可。

31.关于.Rprofile,.Renviron,.First,.Last,options的用法初步

首先,这是一篇菜鸟进阶贴,了解下面的内容,你将对R的熟悉提升一个档次(windows),但仅了解下面的还是一个菜鸟。。。

一般我们只能通过CMD创建.开头的.Rprofile,.Renviron隐藏文件,这里我们使用默认的Rprofile.site,Renviron.site来说,功能一样,1.Renviron.site我不想多说,因为我不了解,只看下面一个代码:

R_LIBS=C:/R/library

就是说设置R的安装包的路径,要了解这个Renviron.site的设置,前提无疑是你需要精通变量的意思和各种各样的变量你才能设置好,这个不适合新手

2.Rprofile.site这个对于我们新手才是暂时的主攻点,上面Renviron.site里设置的都是变量,这里我们设置的都是Rcode,比较常用的有options的设置和.First,.Last的设置,

(在下面的代码前不要加#)大家可以试试看:

options(prompt="R>")

old <- getOption("defaultPackages");

options(defaultPackages = c(old, "MASS"))

.First <- function() {

setwd("C:\\Users\\Administrator\\Desktop\\Rworkspace")}

等等,我们就可以设置很多了,我现在才想起谢老大说的,这对新手是地狱,对高手是天堂的意思了,不过我还是处于地狱。。。

有了上面的一些示例,大家可以试着设置自己的下载包的镜像,从而避免每次都要选择(谢老大的忍者必修有提示)

3..Rdata,这是一个下个帖子要说的保存空间,也就是每次你关闭R前总问你的那个

4..First

基本上R的启动就是按这样的顺序找Renviron.site->Rprofile.site(不找.First)->

.Rdata->.First(应该是这样,即使错了,新手这样理解下吧,等哪天成大牛了,再来纠正我吧)

而.Last是在quit前执行,用法和.First一样

基本上就是这样的一个流程,用的好不好,接下来就要看你多了解windows,变量,options等等了

PS;Rprofile.site,Renviron.site在你安装的R的etc中,可以用文本文件方式打开,或者在RConsole用file.edit(‘绝对路径名')打开编辑