Изменение порядка данных и составление переупорядоченного списка в
Я ранее задавал этот вопрос:
Как мне переупорядочить фрейм данных с несколькими видами в 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))