以前用SAS时,用宏程序去除极值,比如正态分布的去掉正负3std,非正态的去掉个上下5%, 可是在R里有没有类似package呢?在此先谢了
请教:如何用R做数据清理?
具体问题,具体的程序解决,楼主的问题太宽泛了噢,如果有时间,可以改改啊
回复 第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 可以试一下。
我能对 LS +10086 么 。。。[s:18]
#原始数据
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)])
是不是这样的?
#正态分布资料
(out<-rawdat[var<=mean(var)+3*sd(var)&var>=mean(var)-3*sd(var)])
貌似我看到个哪个函数里面有trim选项,好像可以去掉头尾5%什么之类的功能。。。
回复 第7楼 的 肖楠:我需要做一个图像验证码识别的项目,验证码是4个数字或者字母,空心的,有扭曲,你能有办法么,联系我superavis@sina.com,有重谢.