• R语言
  • 请教:如何用R做数据清理?

以前用SAS时,用宏程序去除极值,比如正态分布的去掉正负3std,非正态的去掉个上下5%, 可是在R里有没有类似package呢?在此先谢了

具体问题,具体的程序解决,楼主的问题太宽泛了噢,如果有时间,可以改改啊

回复 第1楼 的 roena:

比如在SAS中,我写宏程序如下

%macro outmstd(data,var,out,n_sd);

proc means data=&data noprint;

var &var;

output out=means(drop=_type_ _freq_)

mean=M_&var

std=S_&var;

run;

data &out;

set &data;

if _n_ = 1 then set means;

if &var lt (M_&var - &n_sd*S_&var) and not missing(&var) or

&var gt (M_&var + &n_sd*S_&var) then out=1;

else out=0;

run;

%mend outmstd;

然后呼叫这个程序就可以完成去掉极值的任务,

%outmstd(data,variable,outputdata,3);

我看所有的R书中都没有介绍到数据清理,也有人说这正是R的弱项,一般是R和其它数据管理功能比较强的软件一同使用,我就有些晕了,还是不能完全离开其它统计软件吗?

没觉得很弱啊,可以参考《Data_Manipulation_with_R》这本书看看

具体这里就是用到mean和sd函数吧

回复 第4楼 的 波波头一头:

a<-mean(CRP,na.rm=T)

sd<-sd(CRP,na.rm=T)

SLCRP$OUT<-ifelse((a-3*sd)<=CRP & CRP<=(a+3*sd),0,1)

是不是这样的,out=1就是极值了,但是我担心na的即不在0中也不在1中。

我在想怎么判定正态分布这件事情上没法做的很好吧(ks.test什么的在实际数据中就是扯淡)?data clean我怎么也觉得是SAS很弱呢。因为虽然提供了貌似很多的选项,但是语法并不自由(没option就别想了),遇到特别奇葩需要parse的东西只能干瞪眼了。你要找包的话,editrules 可以试一下。

#原始数据

set.seed(1); rawdat <- c(rnorm(90, 70, 15), rnorm(10,70,50))

#正态分布资料

(out<-rawdat[rawdat<=mean(rawdat)+3*sd(CRP)&rawdat>=mean(rawdat)-3*sd(rawdat)])

#非正态分布资料

Q=quantile(rawdat, probs = c(.05, .95))

(out<-rawdat[rawdat<=Q[2] & rawdat>=Q[1]])

8楼的更正如下:

#正态分布资料

(out<-rawdat[rawdat<=mean(rawdat)+3*sd(rawdat)&rawdat>=mean(rawdat)-3*sd(rawdat)])

13 天 后

是不是这样的?

#正态分布资料

(out<-rawdat[var<=mean(var)+3*sd(var)&var>=mean(var)-3*sd(var)])

貌似我看到个哪个函数里面有trim选项,好像可以去掉头尾5%什么之类的功能。。。

回复 第7楼 的 肖楠:我需要做一个图像验证码识别的项目,验证码是4个数字或者字母,空心的,有扭曲,你能有办法么,联系我superavis@sina.com,有重谢.