2014-02-06 34 views
1

我有一個包含人名的數據集,但我認爲id是錯誤表示的(在數據集中,每個人的id不是唯一的)。我想創建一個新的id向量,但我想知道如何。例如,如果我們有以下名單:爲面板數據中的每個觀察值創建標識

name 
John 
John 
John 
Tom 
Tom 
David 
David 
Sonia 
Sonia 
Ben 

我們如何爲每個人創建唯一的ID?

id name 
1 John 
1 John 
1 John 
2 Tom 
2 Tom 
3 David 
3 David 
4 Sonia 
4 Sonia 
5 Ben 

看起來像一個簡單的過程,但我不知道如何使用循環!任何建議都會有幫助。

,我想出了一個for循環,看起來接近,但與錯誤:

> for (i in 1:5){ 
+ a<-unique(dat$name) 
+ a<-as.vector(a) 
+ dat$id[a[i]]<-i 
+ dat$id[a[i+1]]<-i+1 
+ } 
Error in `$<-.data.frame`(`*tmp*`, "id", value = c(5L, 5L, 5L, 5L, 5L, : 
    replacement has 11 rows, data has 10 

回答

0

我也想通了,for循環

dat <- read.table(header = TRUE, text = "name 
John 
John 
John 
Tom 
Tom 
David 
David 
Sonia 
Sonia 
Ben") 

for (i in 1:5){ 
    a<-unique(dat$name) 
    a<-as.vector(a) 
    dat$id[dat$name==a[i]]<-i 
} 
2

利用這一點,它可以幫助

dat$id <- as.numeric(as.factor(dat$name)) 

其中「id」爲你的新列,「名」是你的名字列,DAT是原始數據幀

相關問題