0

私は以前にこの質問をしました:」

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」(レコード数)順に並べる必要があります。助言がありますか。前もって感謝します!

乾杯、イスラエル

4

2 に答える 2

1

主に相対的な存在量に関心がある場合は、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))
于 2013-03-12T03:53:14.843 に答える
1

これは、を使用するのと同じくらい簡単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"
于 2013-03-12T03:40:42.863 に答える