2013-03-12 1 views
0

에서 다시 정렬 된 목록을 "재 배열 데이터와 내가 이전에이 질문을 물어 R

어떻게이 연구에서 여러 종과 dataframe 주문을 다시 할 각 종 관찰의 다른 번호를 가지고 있는데이 필요합니다. 대부분의 관측치가 가장 높은 종과 함께 내림차순으로 정렬 된 최종 데이터 프레임이 예제에서 최종 데이터 프레임은 먼저 종 B를 종 C, 종 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"(레코드의 수)으로 정렬 될 필요가있다. 어떤 제안. 미리 감사드립니다!

건배, 이스라엘

답변

1

이것은 unique를 사용하는 것만 큼 간단합니다. 나는 레벨과 실제 값 사이에서 혼란스럽지 않도록 character을 강요한다.

unique(as.character(dfordered$spp)) 

원본 데이터에서 여기 얻으려면, 당신은 또한 당신의 spp을 할 수 있습니다, 당신은 상대적으로 풍부 주로 관심이 있다면 당신은이

sppCount <- table(df$spp) 

names(sort(sppCount, decreasing = TRUE)) 

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

을 정렬 할 수 있습니다 table

table(df$spp) 

## A B C 
## 2 4 3 

사용 주파수별로 정렬 할 계수. 이 경우 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))