В R у меня есть большой фрейм данных, где первые два столбца - это первичный ID (объект) и вторичный ID (элемент объекта). Я хочу создать подмножество этого фрейма данных с условием, что первичный и вторичный ID должны быть повторены в предыдущем фрейме данных 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 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
", 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