Как сделать так, чтобы порядок строк в одном фрейме данных соответствовал порядку строк в другом фрейме данных?

#r #dataframe

Вопрос:

Я работаю с двумя фреймами данных. Я хочу, чтобы порядок строк в одном кадре данных соответствовал порядку строк в другом кадре данных.

Например:

 terms_1 lt;- c("Cat", "Hat", "Dog", "Bat", "Mat", "Cow") terms_2 lt;- c("Dog", "Cow", "Mat", "Cat", "Hat", "Bat")  terms_1_df lt;- data.frame(terms = terms_1, values = sample(seq(1,100, 1), replace = T, length(terms_1))) terms_2_df lt;- data.frame(terms = terms_2, values = sample(seq(1,100, 1), replace = T, length(terms_2)))   
 gt; terms_1_df  terms values 1 Cat 22 2 Hat 47 3 Dog 91 4 Bat 48 5 Mat 60 6 Cow 46 gt; terms_2_df  terms values 1 Dog 94 2 Cow 35 3 Mat 68 4 Cat 21 5 Hat 67 6 Bat 60  

Я хочу, чтобы строки в terms_2_df переставлялись в соответствии с порядком terms строк в terms_1_df

Спасибо!

Ответ №1:

Мы можем использовать match столбцы «условия» между двумя наборами данных для возврата того же порядка, что и во 2-х данных

 terms2_df_new lt;- terms_2_df[match(terms_1_df$terms, terms_2_df$terms),]  

-выход

 terms_2_df_new  terms values 4 Cat 30 5 Hat 55 1 Dog 60 6 Bat 93 3 Mat 46 2 Cow 1  

Ответ №2:

Вы можете использовать factor и order

 terms_2_df[order(factor(terms_2_df$terms, unique(terms_1_df$terms))), ]  # terms values #4 Cat 89 #5 Hat 34 #1 Dog 27 #6 Bat 93 #3 Mat 38 #2 Cow 96