2015-08-20 2 views
0

У меня есть список данных из 1: 323, которые являются mrns [[1]]: mrns [[323]], и каждый dataframe имеет столбец, называемый ar .cat ", который классифицирует непрерывные данные из другого столбца ar.value.Сортировка всех фреймов данных по одному столбцу внутри каждого кадра данных в R

> dput(head(mrns[[1]])) 
ar.value = c(32.8, 32.8, 32.8, 
32.8, 32.8, 32.8), ar.cat = c("HIGH", "HIGH", "HIGH", "HIGH", 
"HIGH", "HIGH")), 

> dput(head(mrns[[2]])) 
ar.value = c(2.7, 2.7, 2.7, 2.7, 2.7, 
2.7), ar.cat = c("LOW", "LOW", "LOW", "LOW", "LOW", "LOW" 
)), 

«ar.cat» имеет значения низкого, среднего и высокого уровня. Каждый файл данных имеет одинаковое значение «ar.cat» для всех строк блока данных. Таким образом, для каждой строки в dataframe 1 она будет иметь «высокое» значение, то для каждой строки в dataframe 2 она будет иметь «низкое» значение и т. Д.

Я пытаюсь заказать все 323 фрейма данных столбец «ar.cat», так что первое, однако, много данных (1: 105) имеет значения «высокий», следующий (106: 207) имеет значение «низкий», затем следующий (208: 323)) имеют значение «средний». Я предполагаю, что алфавитный порядок будет проще всего.

То, что я до сих пор является следующим:

sortCat <- function(df) { 
    sort(df$ar.cat) 
    return(df) 
} 

sorted <- lapply(mrns, sortCat) 

Но что прикажет каждый столбец «ar.cat» в пределах каждого dataframe, а не между всем dataframes.

Есть ли у кого-нибудь предложения?

+0

Я был бы соблазн добавить 'df_index' к каждому кадру данных ('mrns [[1]]' имеет 'df_index = 1',' mrns [[2]] = df_index = 2' и т. д.), а затем связывать все фреймы данных вместе; сортировать их как один фрейм данных, а затем, если структура списка важна, «разбить» их обратно в список. – Benjamin

ответ

3

Вы можете попробовать это с sapply:

order(sapply(mrns, function(x){unique(x$ar.cat)})) 

Но я думаю, что это работает только тогда, когда ваши строки символов, а не фактор

+0

Ничего себе, это было идеально. Спасибо! – nchimato

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