全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
5586 20
2014-05-28
决心自学R,过程中磕磕碰碰,遇到难题查阅资料、教材、help()等等等等,耗费大把大把时间,解决了,兴奋的不得了,很有成就感,恨不得向周围的朋友同事炫耀一番。可是,遇到难题就悲催了,明明在sas、spss里面很简单的事情,在R里面却找不到对应的解决方法,比如
1. 求向量中各值的构成比,sas中就是freq,spss里就是“频率”,R中花费九牛二虎之力就是找不到简单的对应函数,在人大论坛发帖子也没得到合适的答案,好心的朋友提供了方案"table(x)/length(x)",可以解决问题,但总感觉不舒服,这么常用的函数(如同mean一样)真的没有对应函数吗?
2. 分组统计,sas中就是by,spss里就是“分组”,R中的方法前天夜里一直熬夜到凌晨两点半,花费了7个多小时,终于找到了,可以用by,可以用tapply,甚至通过设置cbind向量后可以生成sas、spss都无法做到的按自己要求排列的矩阵,直接复制到word表格就ok了,当时感觉R好强大。
3. 今天晚上又花费了一晚上时间,先是寻找R中工作空间的数据库如何保存,以便下次使用。找到了,但是其他统计软件是不能够直接读的,要转换成csv、txt等通用格式,而且write函数的csv默认导入还不行,要设置“,”、设置不读行标题(否则列标题错行),现在是学习过程无所谓,真担心用在实际工作中一不小心导错(标题和数据错行),麻烦就大了。
4. 今天晚上现在遇到的问题让我有了上述小牢骚,问题就是if函数的使用,我其实就是想生成一个新变量a,里面的值要符合如下条件(x=1&y=1&z=1,x、y、z都是长度4009的向量),那么a=1,否则a=0。找了一晚上总是提示错误。最后还是用sas(if x=1 & y=1 & z=1 then a=1; else a=0)一分钟搞定,话说spss我居然没找到方法(这么简单个逻辑居然没找到方法,不会spss不能通过对话框形式完成,非要也用语法吧?苦笑啊)。

R很好,我也很喜欢,我也会继续努力学习。可是就是——“想说爱你不容易!”入门好难!一些基础的需求都很难掌握(我是指我自己,或许我太愚钝了)

最后的最后,发了这么多牢骚,其实还是想针对上述问题请教各位高手朋友,还望不吝赐教:
1. R中是否有独立单一的生成百分构成比的函数,不是指table(),这个只能统计频数;
2. R有自己独立的数据库格式吗?还是只能保存在.R数据空间中,如果需要导入其他软件就要写入到csv、txt等文件中(不谈mysql等数据库链接啥的,太高大上了)?
3. 想生成一个新变量a,里面的值要符合如下条件(x=1&y=1&z=1,x、y、z都是长度4009的向量),那么a=1,否则a=0。语句真么写,尽量不要是自己编函数吧,感觉这样有点儿杀鸡用牛刀的味道,所以今天我也没思考用编函数的方法解决这个问题?


上述问题,还望高手指点,在此多谢了!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2014-5-29 10:57:00
1. R里的table就是SAS里的Proc freq,只是函数或过程命名的问题,本质没有不同,你要是写VBA就会发现MS那一套函数命名更是操蛋;
2. R里用plyr包可以用来解决SAS里by的问题,用熟了和SAS里的by一样方便;
3. R和其他软件的数据传递,加个数据库中转吧,mysql就不错,和R一样都是免费的,少量的话只能用csv了;
4. 想要根据多个条件生成一个新变量,如a>100时b=1,50<a<=100时b=0...,在SAS里的data步来几个if else就完了,在R里如果是一个数据框,好像只是ifelse嵌套来实现,条件多的话那代码没法看,写完过两天再看的话基本不明白自己在写什么了,没有SAS代码那么直观。可能也有其他解决方法,但是我还没找到。

看你的贴子,应该SAS和SPSS用的都很熟。我和你差不多,这两个也都用过,也刚刚学习R。我觉得你所产生的不适症状完全是对之前两个工具中毒太深所致。一门新的语言有新的语法,但基本也不外乎主谓宾几个结构,换换位置和排列顺序两已。

另外再有个不适应的是数据结构方面的转换,SAS和SPSS都是基于表的,向量和矩阵之类的用的少,而R、Matlab、Python和其他几乎所有的数值计算工具都是基于向量和矩阵的。R高手们都说要把运算向量化,用SAS的肯定没听说过这说法。所以SAS和数据库联系紧密,以及从Matlab转到R不会有多大障碍。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-5-29 11:33:17
playmore 发表于 2014-5-29 10:57
1. R里的table就是SAS里的Proc freq,只是函数或过程命名的问题,本质没有不同,你要是写VBA就会发现MS那一 ...
谢谢playmore的详细解释!非常感谢!一起努力学好R吧,凭直觉R真正掌握后会发挥巨大威力的!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-5-29 13:25:12
对于 PYTHON  我现在也想说    想说爱你不容易
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-5-29 21:47:09
1. R中是否有独立单一的生成百分构成比的函数,不是指table(),这个只能统计频数;
x/sum(x) ?

2. R有自己独立的数据库格式吗?还是只能保存在.R数据空间中,如果需要导入其他软件就要写入到csv、txt等文件中(不谈mysql等数据库链接啥的,太高大上了)?
R有点像胶水工具吧,几乎所有格式都能通过安装包来实现。mysql连接也倒腾过,还比较容易实现。

3. 想生成一个新变量a,里面的值要符合如下条件(x=1&y=1&z=1,x、y、z都是长度4009的向量),那么a=1,否则a=0。语句真么写,尽量不要是自己编函数吧,感觉这样有点儿杀鸡用牛刀的味道,所以今天我也没思考用编函数的方法解决这个问题?
==
x,y,z是已知向量吗?
a<-as.numeric(x==1&y==1&z==1) ?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-5-29 23:38:03
asprine 发表于 2014-5-29 21:47
1. R中是否有独立单一的生成百分构成比的函数,不是指table(),这个只能统计频数;
x/sum(x) ?
谢谢你的回复!
1. 经测试是对向量里面每一个值求相对于总和的百分比,不是我说的那个频率百分比的意思
3. 不是我想表达的意思,不过我找到一个用which()函数解决的方法,如下
a = rep(0,4009) #生成一个有长度为4009的向量
a[which(s$n2h==1&s$n3h==1&s$n4h==1)]=1
a就是最后想要的结果了。就是不知道还有没有其他更简洁的做法。

不管怎么说,都非常谢谢你的热心回复!谢谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群