2015-09-03 4 views
0

Просьба не отмечать это как дубликат, так как я отвечу на этот вопрос, как только узнаю, что случилось. Я использовал Levels() с очень высокой степенью успеха, и сегодня он отказывается работать, что может. Вот чего я пытаюсь достичь. У меня два кадра данных с одинаковым столбцом. Я использую простой слияния() функции следующим образом:Установка порядка строк в R с использованием уровней

mergedData<-merge(df1, df2, by='Index') 

Теперь я хочу, чтобы изменить порядок в «индекс» столбец, т.е. изменить порядок строк в файле «mergedData», чтобы соответствовать порядку в любом из исходные данные. Это команда, я использую для достижения переназначения:

mergedData$Index<-factor(mergedData$Index, 
levels=c("ND","TC","PR","W","MI")) 

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

Любая помощь/предложения/рекомендации были бы весьма признательны.

Я приложил данные из двух dataframes для всех вас, чтобы поиграть с:

df1

structure(list(Index = structure(1:5, .Label = c("ND", "TC", 
"PR", "W", "MI"), class = "factor"), `CP` = c(0.7102, 
0.059, -0.0469, 1.0137, 0.6116), FA1 = c(0.5218, 0.0249, -0.0532, 
0.9561, 1.1676), FA2 = c(0.5625, 0.0397, -0.0712, 0.9636, 0.9569 
), FA3 = c(0.5934, 0.0332, -0.0442, 0.9873, 0.8929)), .Names = c("Index", 
"CP", "FA1", "FA2", "FA3"), row.names = c(NA, 5L), class = "data.frame") 

df2

structure(list(Index = structure(1:5, .Label = c("ND", "TC", 
"PR", "W", "MI"), class = "factor"), `CP SD` = c(0.0241, 
0.0184, 0.0021, 0.0114, 0.0947), `FA1 SD` = c(0.1891, 0.0171, 
0.0104, 0.0559, 0.5321), `FA2 SD` = c(0.1273, 0.0243, 0.0173, 
0.0565, 0.3292), `FA3 SD` = c(0.0518, 0.0094, 0.0078, 0.0195, 
0.1581)), .Names = c("Index", "CP SD", "FA1 SD", "FA2 SD", 
"FA3 SD"), row.names = c(NA, 5L), class = "data.frame") 

Благодарности

ответ

1

levels только контролирует порядок уровней факторов (как он будет отображаться levels(x), в table и т. Д.), А не порядок строк в data.frame. Для того, чтобы заказать кадр данных, используйте:

mergedData <- mergedData[order(mergedData$Index),] 

Или с dplyr:

library(dplyr) 
mergedData <- arrange(mergedData,Index) 
+0

Спасибо @Scoa. Все работает нормально. Я все равно не знал об этом. Приветствия. – VGu