我有一个带有人名的数据集,但我认为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
答案 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
}