В R у меня есть большой фрейм данных, где первые два столбца - это первичный идентификатор (объект) и вторичный идентификатор (элемент объекта).Я хочу создать подмножество этого фрейма данных с условием, что первичный и вторичный идентификаторы должны были повторяться в прежнем фрейме 20 раз.Я также должен повторить этот процесс для других фреймов данных с той же структурой.
Сейчас я сначала подсчитываю, сколько раз каждая пара значений (первичный и вторичный идентификаторы) повторяется в новом фрейме данных, а затемиспользуя цикл for
для создания нового кадра данных, но процесс очень медленный и неэффективный: цикл записывает 20 строк в секунду, начиная с кадра данных, в котором содержится от 500 000 до 1 миллиона строк.
for (i in 1:13){
x <- fread(dataframe_list[i]) #list which contains the dataframes that have to be analyzed
x1 <- ddply(x,.(Primary_ID,Secondary_ID), nrow) #creating a dataframe which shows how many times a couple of values repeats itself
x2 <- subset(x1, x1$V1 == 20) #selecting all couples that are repeated for 20 times
for (n in 1:length(x2$Primary_ID)){
x3 <- subset(x, (x$Primary_ID == x2$Primary_ID[n]) & (x$Secondary_ID == x2$Secondary_ID[n]))
outfiles <- paste0("B:/Results/Code_3_", Band[i], ".csv")
fwrite(x3, file=outfiles, append = TRUE, sep = ",")
}
}
Как взять, например, все строки из предыдущего кадра данных, которые имеют в качестве значений для первичного и вторичного идентификатора те, которые получены в кадре данных x2 сразу, вместо записи одного набора из 20 строк за раз?Может быть, в SQL проще, но мне сейчас приходится иметь дело с R.
Редактировать:
Конечно.Допустим, я начинаю с такого кадра данных (с другими строками с повторяющимися идентификаторами я просто остановлюсь на 5 строках, чтобы быть короткими):
Primary ID Secondary ID Variable
1 1 1 0.5729
2 1 2 0.6289
3 1 3 0.3123
4 2 1 0.4569
5 2 2 0.7319
Затем с моим кодом я считаю в новомдатафрейм повторяющихся строк (для порогового значения 4 вместо 20, поэтому я могу привести вам краткий пример):
Primary ID Secondary ID Count
1 1 1 1
2 1 2 3
3 1 3 4
4 2 1 2
5 2 2 4
Требуемый вывод должен представлять собой такой фрейм данных:
Primary ID Secondary ID Variable
1 1 3 0.5920
2 1 3 0.6289
3 1 3 0.3123
4 1 3 0.4569
5 2 2 0.7319
6 2 2 0.5729
7 2 2 0.6289
8 2 2 0.3123