2014-03-24 95 views
4

加計數專欄中,我有一個兩級的數據集(假設嵌套學校內班級)和數據集編碼使用變換和plyr到R中

像這樣:

School Class 
    A  1 
    A  1 
    A  2 
    A  2 
    B  1 
    B  1 
    B  2 
    B  2 

但要運行分析我需要數據擁有唯一的班級ID,無論學校成員身份如何。

School Class NewClass 
    A  1  1 
    A  1  1 
    A  2  2 
    A  2  2 
    B  1  3 
    B  1  3 
    B  2  4 
    B  2  4 

我嘗試使用變換和ddply,但我不知道如何保持持續的NewClass遞增到一個更大的數字爲學校及班級的每個組合。我可以想到一些不太好的方法來做到這一點,但我相信現在有很多簡單的解決方案是我現在無法想到的。任何幫助,將不勝感激!

回答

3

使用interaction創建一個因子,然後強制其爲整數:

transform(dat,nn = as.integer(interaction(Class,School))) 
    School Class nn 
1  A  1 1 
2  A  1 1 
3  A  2 2 
4  A  2 2 
5  B  1 3 
6  B  1 3 
7  B  2 4 
8  B  2 4 
3

使用data.table

library(data.table) 
dt = as.data.table(your_df) 

dt[, NewClass := .GRP, by = list(School, Class)] 
dt 
# School Class NewClass 
#1:  A  1  1 
#2:  A  1  1 
#3:  A  2  2 
#4:  A  2  2 
#5:  B  1  3 
#6:  B  1  3 
#7:  B  2  4 
#8:  B  2  4 

.GRP就是一組計數器。另外請注意,您並不需要這樣做,並且可以繼續使用上述組合list(School, Class),無論您需要做什麼by操作。


注意,從data.table版本>= 1.9.0,功能setDT被導出,通過參考data.frame轉換爲data.table(無副本制),在情況下,你要堅持到data.tables。

require(data.table) ## >= 1.9.0 
setDT(your_df)  ## your_df is now a data.table, changed by reference. 
+0

@阿倫謝謝,我需要補充說我的詞彙量(我認爲你的意思是現在而不是不是) – eddi