Изменение порядка данных и составление переупорядоченного списка в

Я ранее задавал этот вопрос:

Как мне переупорядочить фрейм данных с несколькими видами в r. Каждый вид имеет различное количество наблюдений, и мне нужно, чтобы окончательный набор данных был упорядочен в порядке убывания, причем виды с большинством наблюдений перечислены первыми. В этом примере окончательный кадр данных должен сначала посмотреть список видов B, затем вид C и, наконец, вид A ".

colA= c("C","C","C","B","B","B","B","A","A")
colB= c(1.1,2.1,3.1,4.1,5.1,6.1,7.1,8.1,9.1)
colC= c(-1.2,-2.1,-3.1,-4.1,-5.1,-6.1,-7.1,-8.1,-9.1)
df= data.frame (spp=colA, latitude=colB, longitude=colC)
df

Я получил отличный ответ, который работал хорошо:

# add a column counting the number of rows in each species
df <- transform(df, n  = ave(latitude ,spp, FUN = length))
# order by this new column
dfordered <- df[order(df$n),decreasing = TRUE]

но теперь я снова застрял в создании объекта "вида", в котором есть упорядоченные названия видов. Прямо сейчас у меня есть:

species <- levels(df$spp)

эта команда возвращает все в алфавитном порядке, но мне нужно, чтобы объект был упорядочен по "n" (количество записей). Какие-либо предложения. Заранее спасибо!

Ура, Израиль

2 ответа

Решение

Это так же просто, как использовать unique, Я принуждаю к character чтобы не запутаться между уровнями и фактическими значениями.

 unique(as.character(dfordered$spp))

Чтобы получить здесь из исходных данных, используйте table

table(df$spp)

##  A B C 
##  2 4 3 

Вы можете отсортировать это

sppCount <- table(df$spp)

names(sort(sppCount, decreasing = TRUE))

# [1] "B" "C" "A"

Если вы в первую очередь заинтересованы в относительном изобилии, вы также можете spp фактор упорядочивается по частоте. В этом случае используйте reorder() упорядочить его уровни по желанию, а затем отсортировать data.frame так, чтобы виды с наибольшим количеством наблюдений были на первом месте.

df <- transform(df, spp = reorder(spp, spp, length))
df[order(df$spp, decreasing=TRUE),]
#   spp latitude longitude
# 4   B      4.1      -4.1
# 5   B      5.1      -5.1
# 6   B      6.1      -6.1
# 7   B      7.1      -7.1
# 1   C      1.1      -1.2
# 2   C      2.1      -2.1
# 3   C      3.1      -3.1
# 8   A      8.1      -8.1
# 9   A      9.1      -9.1

## To see one advantage of reordering the factor levels
barplot(table(df$spp))
Другие вопросы по тегам