Below is a code fragment that solves the problem. Verified
# основная идея на основании заданного дата фрэйма создать новый в котором посчитано # для уникального сочетания строк по полям cluster1, cluster2, ... # количество с 0-ми, 1-ми и общее количество строк # исключаем строки не удовлетворяющие требуемым условиям и в дальнейшем новый дата фрэйм # используем как эталон для выборки из заданного дата фрэйма library(dplyr) # файл с данными data.file <- "/home/UserName/Документы/questions_586979/dtfrm.csv" Mx.Sz <- 2 #10 - переменная для граничного условия "нужно найти такие строчки которые повторяются не менее 10 раз в всей выборке" # для прогона тестового примера определяем 2 Mx.Prcnt <- 60 # переменная для граничного условия "в каждой из найденных одинаковых групок которые повторялись, количество "1" # в target.label должно превышать 70% по отношению к "0" # для прогона тестового примера определяем 60% # открываем файл с данными df <- read.csv2(data.file) # создаем два дополнительных столбца, по количеству возможныйх значений в target.label # trgt.lbl.0 и заполняем 1 если значение target.label = 0 # trgt.lbl.1 и заполняем 1 если значение target.label = 1 df.tmp1 <- mutate(df, cluster1, cluster2, cluster3, cluster4, cluster5, trgt.lbl.0 = ifelse(target.label == 0, 1, 0), trgt.lbl.1 = ifelse(target.label == 1, 1, 0)) # производим группировку по полям cluster1, cluster2,... df.tmp2 <- group_by(df.tmp1, cluster1, cluster2, cluster3, cluster4, cluster5) # суммируем по столбцам trgt.lbl.0, trgt.lbl.1 для определения количества 0 и 1 в строке # далее используем для определения % соотношения количества строк с 1 к общему количеству строк # для уникального сочетания cluster1, cluster2 ... # определяем количество строк с уникальным сочетанием значений по полям cluster1, cluster2 ... # далее количество строк используем для исключения строк не удовлетворяющий условию Mx.Sz df.tmp3 <- summarise(df.tmp2, sm.0 = sum(trgt.lbl.0), sm.1 = sum(trgt.lbl.1), all.rc = n()) # создаем поле sm.1.prcnt - значение которого показывает количество % строк с 1-ми к общему количеству # для уникального сочетания cluster1, cluster2 ... df.tmp4 <- mutate(df.tmp3, sm.1.prcnt = sm.1*100/all.rc) # исключаем строки не удовлетворяющих нашим граничным условиям # по общему количеству строк и процентному соотношению строк с 1-ми # в результате получили дата фрэйм содержащий необходимые нам строки df.tmp5 <- filter(df.tmp4, all.rc >= Mx.Sz & sm.1.prcnt >= Mx.Prcnt) # в цикле на основании строк, удовлетворяющих требованиям, выбираем строки из исходного дата фрэйма # с последующей записью в файл for (i in 1:nrow(df.tmp5)) { # результирующий дата фрэйм df.tmp6 <- filter(df, as.integer(cluster1) == as.integer(df.tmp5[i, 1]) & as.integer(cluster2) == as.integer(df.tmp5[i, 2]) & as.integer(cluster3) == as.integer(df.tmp5[i, 3]) & as.integer(cluster4) == as.integer(df.tmp5[i, 4]) & as.integer(cluster5) == as.integer(df.tmp5[i, 5])) # имя результирующего дата фрэйма nm.rslt <- paste0("nm.rslt.",i, ".csv") # записываем результат write.csv(df.tmp6, file = nm.rslt, row.names=FALSE) }
partykitpackage. - Artem Klevtsov