В R: Создание объектов data.frame внутри цикла с несколькими индексами - PullRequest
0 голосов
/ 21 сентября 2018

Я застрял с моим кодом.У меня есть набор данных (DS) с N строк.Моя цель состоит в том, чтобы отфильтровать из моего набора данных набор строк, где количество фильтруемых строк зависит от 2 параметров.

То, что я сделал, - это цикл для различных значений i (i = 1,.., I; первый параметр) и различные значения j (j = 1, .., J; второй параметр).Содержимое внутри цикла стремится отбросить выбранные строки и создать сокращенную версию набора данных (которую я называю ds2).

Итак, для каждой комбинации ij я хочу сохранить объекты уменьшенных наборов данных K = I * J ds2 как data.frame.Дело в том, что цикл работает с индексами «i» и «j», но затем я хочу сохранить объект, используя индекс «k».

Я прикрепляю свой код, где я задаю i = 2: 3и j = 9:10 (итак, K = 4).Я использую temp + assign для создания моих объектов набора данных.

Этот код успешно создает 4 объекта data.frame, но не может их правильно создать, поскольку все они равны (все они ссылаются на один из4 комбинации)

ds2 = paste("ds2_",c(seq(1,4,1)),sep="") # i then assign each dataset to one of the elements in ds2 

for (k  in 1:length(ds2)){   # datasets to generate
for (i in seq(2,3, by = 1)){ # parameter i values
    for (j in seq(9,10, by = 1)) { # parameter j values

        ds$active = 1   # once the first loop ends, I reset the variable active to 1

        v_1mm = rollapply(ds$v_1, i , max)
        v_2mm = rollapply(ds$v_2, i , max)
        v_3mm = rollapply(ds$v_3, i , max)
        v_4mm = rollapply(ds$v_4, i , max)
        v_5mm = rollapply(ds$v_5, i , max)
        v_6mm = rollapply(ds$v_6, i , max)
        v_7mm = rollapply(ds$v_7, i , max)
        v_8mm = rollapply(ds$v_8, i , max)
        v_9mm = rollapply(ds$v_9, i , max)
        v_10mm = rollapply(ds$v_10, i , max)

        ds$v_1mm = c(rep(0, i-1), v_1mm)
        ds$v_2mm = c(rep(0, i-1), v_2mm)
        ds$v_3mm = c(rep(0, i-1), v_3mm)
        ds$v_4mm = c(rep(0, i-1), v_4mm)
        ds$v_5mm = c(rep(0, i-1), v_5mm)
        ds$v_6mm = c(rep(0, i-1), v_6mm)
        ds$v_7mm = c(rep(0, i-1), v_7mm)
        ds$v_8mm = c(rep(0, i-1), v_8mm)
        ds$v_9mm = c(rep(0, i-1), v_9mm)
        ds$v_10mm = c(rep(0, i-1), v_10mm)

        ds$active[(ds$v_1mm <= j | is.na(ds$v_1)) & 
        (ds$v_2mm <=j | is.na(ds$v_2)) & 
        (ds$v_3mm <=j | is.na(ds$v_3)) & 
        (ds$v_4mm <=j | is.na(ds$v_4)) & 
        (ds$v_5mm <=j | is.na(ds$v_5)) & 
        (ds$v_6mm <=j | is.na(ds$v_6)) & 
        (ds$v_7mm <=j | is.na(ds$v_7)) & 
        (ds$v_8mm <=j | is.na(ds$v_8)) & 
        (ds$v_9mm <=j | is.na(ds$v_9)) & 
        (ds$v_10mm <=j | is.na(ds$v_10))] = 0

        temp = ds[ds$active==1,] # temporary object
        assign(ds2[k], temp) # assign the object to ds2 
        }
}

Существует ли правильный способ создания объекта data.frame для каждого цикла цикла?Имеет смысл или нет устанавливать третий цикл в k?

Заранее спасибо

Родольфо

...