在R中为我的案例改进for循环的更好方法是什么?

时间:2015-04-01 16:11:26

标签: r

Prob stat: 数据集包含两列mstr_program_list,Loc_cat为600000.Loc_cat列包含缺失和非缺失的单元格。其他专栏没有NA。对于mstr_program_list中的每个prog,需要查找与该程序关联的loc-cat的总数,非缺失行的百分比以及非缺失行中找到的类别的数量。

Ex:对于未知的prog - 总行数= 3,loc_cat中的非缺失行是1,因此%是(2/3)* 100,分类的类别数是2(休:完整)(其余:lim) )

   > head(data)
        L.Name                   mstr_program_list            loc_cat
    1  Six J'SGroup                   Unknown              <NA>
    2  Bj's- Maine             Roasted Tomat               Rests: Full
    3  Bj's- Maine                     Unknown             Rests: Full
    4  Brad's Q Q                      Unknown             Rests: lim

预期产出:

     mstr_prog   total_count    %good(non missing rows)   Number of loc_cat
     Unknown         3                      66.7                     2

下面的代码需要花费很多时间。实际上结果没有显示出来。任何人都可以帮助我改进代码。根据我的观点,使用此代码的问题是添加向量。

经过研究,我开始知道向vector添加值而不使用append并使用c()

v <- c(v, 'y') # adding elements into a vector

代码:

data          <- read.csv("MgData.csv",header=T, na.strings="", colClasses = classes,      nrows = 600338,comment.char="")                           ## import data.
data_NoNull   <- na.omit(data)
mpl_unique    <- unique(data$mstr_program_list)
mas_Prog_List <- as.character()
loc_Count     <- as.numeric()
per_Seg       <- as.numeric()
num_Seg       <- as.numeric()
for(i in 1:length(mpl_unique)) {
    l_t <- length(data$mstr_program_list[data$mstr_program_list == i])   # loc_cat specific to prog
    l_g <- length(data_NoNull$mstr_program_list[data_NoNull$mstr_program_list == i])    ## to know filled ones excluding empty
    s <- subset(data_NoNull, mstr_program_list==i, select =c(loc_cat))
    if((any(i == mas_Prog_List)) == FALSE) {
        no_Seg <- nrow(unique(s))
        mas_Prog_List <- c(mas_prog_list, i)                 # Adding values to vector
        loc_Count     <- c(loc_count, l_t)
        perct_Seg     <- ((l_g/l_t)*100)
        per_Seg       <- c(per_Seg, perct_seg)
        Num_Seg       <- c(Num_Seg, no_seg)
        }
       }
      }
 Seg_analysis <- data.frame(mas_Prog_List, loc_Count, per_Seg, num_Seg)

我是R.的新手。通过代码中的更改,使用命名约定/术语来纠正我。 谢谢

0 个答案:

没有答案