2014-07-17 13 views
0

我的數據是18行8列。它包含數字和字數據。我想爲每一行分配一個ID號碼。我想用相同的ID號將具有前5列中相同信息的行分組。出於某種原因,我不認爲我正在循環。有什麼想法嗎?R:分組行時的循環和語法

sampdata<-read.csv("xxx") 

sampdata["ID"] <- 0 #ID column 

count<-1 #to subtract from 10000 

for (p in 1:18) { 

if (sampdata[p,9] == 0){ 

count<-count+1 

sampdata[9,p]<-10000-count 

for (i in 1:5){ #column index for current check (only check defining info) 

    for (j in 1:18) { #row index for current check 

    for (k in 1:18){ #column index for current check against 

     if (sampdata[i,j]==sampdata[i,k]) 

     sampdata[j,9]<-sampdata[9,p] #assign same ID number 


    } 
    } 
} 

}}

+0

這是最有可能不是你做想做的事非常R-習慣的方法。你能否提供樣本數據(例如,使用'dput(head(sampdata,20))'? –

回答

0

假設你的數據看起來像這樣

mm<-matrix(c(
1,1,2,2,3, 1,1,2,2,3, 
2,2,2,3,3, 2,2,2,3,3, 
4,3,2,1,2, 1,1,2,2,3, 
3,1,1,2,2 
), byrow=T, ncol=5) 

dd<-data.frame(mm[,1:3], 
    X4=letters[mm[,4]], X5=mm[,5], 
    matrix(runif(nrow(mm)*(18-ncol(mm))), nrow=nrow(mm))) 

如果你的數據是dd和第5列定義一個組。您可以使用interaction()一個唯一的ID分配給每個組這樣

dd$ID <- as.numeric(interaction(dd[,1:5], drop=T, lex.order=T)) 
+0

如果數據不是全部數字,這個工作是否可以工作?即:一列給出每一行的狀態 –

+0

這個樣本包含非數字值。所以是的,它會工作的 – MrFlick

+0

非常感謝這麼多!現在我知道這個方法的工作原理,我希望能夠在一個數據集上運行這個程序,這個數據集大約是725000個列。對於如何在沒有手動分解的大集合上運行這個方法,你有什麼建議嗎? –