为面板数据中的每个观察创建id

时间:2014-02-06 07:19:38

标签: r

我有一个带有人名的数据集,但我认为id被误传(现在数据集中每个人的ID不是唯一的)。我想创建一个新的id向量,但我想知道如何。例如,如果我们有以下名称列表:

name
John
John
John
Tom
Tom
David
David
Sonia
Sonia
Ben

我们如何为每个人创建唯一身份证?

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

2 个答案:

答案 0 :(得分:2)

使用它,它可能会有所帮助

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

其中“id”是您的新列,“name”是您的名称列,dat是原始数据框

答案 1 :(得分: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
}