将所有NAL列从数字转换为因子

时间:2017-05-18 13:04:51

标签: r

我有data.table名为td.br.2,其中有些列完全 NAs。这些列的类型为numeric。我想做的是,这些列将它们转换为因子。

我已尝试过以下内容,但它不起作用(我没有收到错误,但它也没有完成这项工作)

td.br.2[] <- td.br.2[,lapply(.SD, function(x) {ifelse(sum(is.na(x)==nrow(td.br.2)),as.factor(x),x)})]

2 个答案:

答案 0 :(得分:1)

我不确定你为什么要那样做,但是你在这里:

SELECT 
    PER_ID, 
    PER_SS, 
    CHARGE_CD,
    PER_CASE_ID,
    MAX_PER_PS=MAX(PER_PS),
    MIN_PER_PS=MIN(PER_PS), 
    PER_CODE,
    FILE_DT
    FROM #TEMP
GROUP BY
    PER_ID, 
    PER_SS, 
    CHARGE_CD,
    PER_CASE_ID,
    PER_CODE,
    FILE_DT 

这些因素没有水平,但你可以根据需要处理。

(for循环部分基于this。)

答案 1 :(得分:1)

n=10#nr of rows
m=10#nr of cols
N<-n*m
m1<-matrix(runif(N),nrow=n,ncol = m)
dt<-data.table(m1)
names(dt)<-letters[1:m]
dt<-cbind(dt,xxx=rep(NA,nrow(dt)))#adding NA column

此时

str(dt)
Classes ‘data.table’ and 'data.frame':  10 obs. of  11 variables:
 $ a  : num  0.661 0.864 0.152 0.342 0.989 ...
 $ b  : num  0.06036 0.67587 0.00847 0.37674 0.30417 ...
 $ c  : num  0.3938 0.6274 0.0514 0.882 0.1568 ...
 $ d  : num  0.777 0.233 0.619 0.117 0.132 ...
 $ e  : num  0.655 0.926 0.277 0.598 0.237 ...
 $ f  : num  0.649 0.197 0.547 0.585 0.685 ...
 $ g  : num  0.6877 0.3676 0.009 0.6975 0.0327 ...
 $ h  : num  0.519 0.705 0.457 0.465 0.966 ...
 $ i  : num  0.43777 0.00961 0.30224 0.58172 0.37621 ...
 $ j  : num  0.44 0.481 0.485 0.125 0.263 ...
 $ xxx: logi  NA NA NA NA NA NA ...

所以执行:

dt<-dt[, lapply(.SD, function(x){ if(all(is.na(x)))as.factor(as.character(x)) else x}),]

产量:

str(dt)
Classes ‘data.table’ and 'data.frame':  10 obs. of  11 variables:
 $ a  : num  0.0903 0.0448 0.5956 0.418 0.1316 ...
 $ b  : num  0.672 0.582 0.687 0.113 0.371 ...
 $ c  : num  0.404 0.16 0.848 0.863 0.737 ...
 $ d  : num  0.073 0.129 0.243 0.334 0.285 ...
 $ e  : num  0.485 0.186 0.539 0.486 0.784 ...
 $ f  : num  0.4685 0.4815 0.585 0.3596 0.0764 ...
 $ g  : num  0.958 0.194 0.549 0.71 0.737 ...
 $ h  : num  0.168 0.355 0.552 0.765 0.605 ...
 $ i  : num  0.665 0.88 0.23 0.575 0.413 ...
 $ j  : num  0.1113 0.8797 0.1244 0.0741 0.8724 ...
 $ xxx: Factor w/ 0 levels: NA NA NA NA NA NA NA NA NA NA