Предположим, у меня есть два разных набора данных Data1
и Data2
. Для каждой записи в Data1$Incidents
я хочу найти строки в Data2$Incidents
, которые соответствуют ей, а также отслеживать записи, не имеющие совпадений. Затем я сохраняю записи, которые соответствуют новому кадру данных Data1_Matches
. Теперь для каждой записи в Data2$Incidents
Я ищу записи в Data1_Matches$Incidents
, которые соответствуют, а затем создают аналогичный фрейм данных Data2_Matches
.Избегание цикла for в R
Пусть ради аргумента моих наборов данных выглядит следующим образом:
Day Incidents
"Monday" 30
"Friday" 11
"Sunday" 27
Мой алгоритм на данный момент выглядит следующим образом:
Data1_Incs = as.integer(Data1$Incidents)
LEN1 = length(Data1_Incs)
No_Match = 0
for (k in 1:LEN1){
Incs = which(Data2$Incidents == Data1_Incs[k])
if (length(Incs) == 0){
No_Match = c(No_Match,k)
}
}
No_Match = No_Match[-1]
Data1_Match <- Data1[-No_Match,]
Data1_No_Match <- Data1[ No_Match,]
Data2_Incs = Data2$Incidents
LEN2 = length(Data2_Incs)
Un_Match = 0
for (j in 1:LEN2){
Incs = which(as.integer(Data1_Match$Incidents) == Data2_Incs[j])
if (length(Incs) == 0){
Un_Match = c(Un_Match, j)
}
}
Un_Match = Un_Match[-1]
Data2_Match <- Data2[-Un_Match,]
Data2_No_Match <- Data2[ Un_Match,]
Что такое лучший способ для меня выполнить эту задачу, не используя цикл for? Для справки Data1
имеет около 15 000 записей, а Data2
имеет более двух миллионов.
Если вы предоставляете небольшой, автономный образец каждого набора данных, это будет намного легче помочь –
Совпадает в каком смысле? Весь ряд идентичен? Или вы используете столбец или набор столбцов в качестве ключа? – ulfelder
@ulfelder Образец данных, который я дал, не удивительно, но я имею в виду соответствие в этом смысле: для каждой строки в «Data1» я ищу, есть ли запись в «Data2 $ Incidents», которая соответствует этой отдельной записи из 'Data1'. Если совпадения нет, я сохраняю индекс, чтобы я мог делить «Data1» на два следующих набора данных: один со спичками и один без совпадений. – Mnifldz