2015-08-24 4 views
0

У меня есть два кадра данных (DF1 и df2), что я пытаюсь сравнить значения вR Программирование - Сравнение стоимостной формы каждой строки в data.frame с каждой строкой другого data.frame

Для каждого. строка в DF1, я хочу сравнить столбец 1 со столбцом 1 для каждой строки в DF2. Для каждого соответствия (для каждого значения из DF1 может быть много), я хочу заполнить другой фрейм данных (DF3) значениями из строки, где находится сравнимое значение, и значениями из соответствующих строк в DF2.

Ниже приведен код, над которым я работаю. Я знаю, что мне следует избегать циклов, не говоря уже о вложенных циклах, но я не могу найти другого пути или найти какие-либо примеры.

DF3 <- data.frame("id","DF1Timestamp","DF2Timestamp") 


head(df1) 
      id     timestamp  
    1 CA8058409291009 2015-07-10 15:25:31 
    2 CA8058402571009 2015-07-10 15:50:20 
    3 CA8323300811005 2015-07-10 16:18:52 
    4 CA8058402571009 2015-07-10 16:51:54       
    5 CA8323300811005 2015-07-10 16:54:03 

head(df2) 

      id   timestamp  
1 CA8058402571009 2015-07-10 15:49:23 
2 CA8323300811005 2015-07-10 16:18:37 
3 CA8058402571009 2015-07-10 16:31:42 
4 CA8058409291009 2015-07-10 16:34:34 
5 CA8058402571009 2015-07-10 16:51:29 

#sets the index used to identify row numbers in the DF3 table 
index <- 1 

for (i in 1:nrow(DF1)){ 
    for (j in 1:nrow(DF2)){ 
    if ((DF1[i,3]) == (DF2[j,3])) { 
     DF3 [[i,1]] <- (DF1[i,3]) 
     DF3 [[i,2]] <- (DF1[i,2]) 
     DF3 [[i,3]] <- (DF2[j,3]) 
     index <- index +1 
    } 
    else{ 
     #do nothing 
    } 
    } 
} 

Все, что я получу за результаты

head(DF3) 

      ID.   DF1timestamp  DF2timestamp 
1   <NA>    <NA>    <NA> 
2   <NA>    <NA>    <NA> 
3   <NA>    <NA>    <NA> 
4   <NA>    <NA>    <NA> 
5   <NA>    <NA>    <NA> 
6   <NA>    <NA>    <NA> 

То, что я хотел, чтобы получить это.

head(DF3) 

     id     DF1Timestamp   DF2Timestamp 
1 CA8058409291009  2015-07-10 15:25:31 2015-07-10 16:34:34 
2 CA8058402571009  2015-07-10 15:50:20 2015-07-10 16:31:42 
3 CA8058402571009  2015-07-10 15:50:20 2015-07-10 16:51:54 
4 CA8323300811005  2015-07-10 16:18:52 2015-07-10 16:18:37 
5 CA8058402571009  2015-07-10 16:51:54 2015-07-10 15:49:23 
6 CA8058402571009  2015-07-10 16:51:54 2015-07-10 16:31:42 
7 CA8323300811005  2015-07-10 16:54:03 2015-07-10 16:18:37 

То, что это таблица, показывающая первый раз, когда произошло событие, и при заданном ID и ряд для всех возможных времен окончания события.

Любая помощь приветствуется.

+0

Пожалуйста, включите желаемый результат? –

+0

Похоже, что 'DF1' имеет шесть строк, так как ваш результат заканчивается тем, что многие. Было бы намного яснее с воспроизводимым примером: http://stackoverflow.com/a/28481250/1191259 – Frank

+2

Похоже, вы зацикливаетесь на то, что «merge (df1, df2)» делает –

ответ

1

Я хотел бы использовать слияние()

df3 <- merge(df1, df2, by.x = 'id', by.y = 'id') 
> df3 
      id    date.x    date.y 
1 CA8058402571009 2015-07-10 15:50:20 2015-07-10 15:49:23 
2 CA8058402571009 2015-07-10 15:50:20 2015-07-10 16:31:42 
3 CA8058402571009 2015-07-10 15:50:20 2015-07-10 16:51:29 
4 CA8058402571009 2015-07-10 16:51:54 2015-07-10 15:49:23 
5 CA8058402571009 2015-07-10 16:51:54 2015-07-10 16:31:42 
6 CA8058402571009 2015-07-10 16:51:54 2015-07-10 16:51:29 
7 CA8058409291009 2015-07-10 15:25:31 2015-07-10 16:34:34 
8 CA8323300811005 2015-07-10 16:18:52 2015-07-10 16:18:37 
9 CA8323300811005 2015-07-10 16:54:03 2015-07-10 16:18:37 
+0

Работал идеально. Похоже, я пытался сделать вещи трудными. – Terno

Смежные вопросы