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 回答