2013-06-03 52 views
0

我是R新手,有一個相對簡單的問題,我無法弄清楚。我有一個大約30,000行和3列的數據集。每30行是一個樣本,但沒有樣本的標識符。我想排列每個行的單個樣本(即我需要排名30--1:30,然後31:60然後61:90,等等的每個子集等等,以30000)。我想將輸出綁定到原始數​​據表。任何簡單的方法來完成這項任務?謝謝!數據集的排名子集

回答

2

爲了區分這些行,添加另一列:

dataset$rank <- rep(1:1000, each=30) 

對於任何更詳細的,在這個問題詳細一點的是秩序。

+0

+1 - 雖然我不會稱之爲「排名」,更像是一個「id」。我同意我們需要更多的細節,以說明OP稱之爲「等級」。 – flodel

+0

感謝您的輸入。這裏有更多的細節。我有一個三列表mydataset。它是30,000行的數據集。但是,每隔30行,我都會更換樣品。我想在V3列中對每個樣本mydataset $ V3進行排序(不排序)它們的值,並將該排名放入新列mydataset $ V4中。這意味着我想對每排30行執行排名功能。我想作爲一個forloop這將排名第1-30行退出循環,然後在接下來的30(行31-60)執行相同的功能。這是否足夠的信息?你還想知道什麼? – user2449619

1

的樣本數據:

n <- 3000 
df <- data.frame(V1 = runif(n), V2 = runif(n), V3 = runif(n)) 

如何添加一個計算rankV3每30行一列:

df <- transform(df, rank = ave(V3, (seq_along(V3) - 1) %/% 30, FUN = rank)) 

您還可以打破它了一下,如果它可以幫助理解:

df <- within(df, {ID = 1 + (seq_along(V3) - 1) %/% 30 
        rank = ave(V3, ID, FUN = rank)}) 

在這第二個建議中,我從transformwithin,因爲前者不允許根據其他新定義的變量(ID)定義變量(rank)。

+0

複雜但工作很好!謝謝! – user2449619

+0

@ user2449619,然後請考慮接受我的答案。謝謝。 – flodel