#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