我有一个带变量的数据集,我需要通过重新编码到另一个变量来更改匿名。 有20,000个条目,有些是重复的,所以我的数据看起来像这样:
DCD97568
DCD23547
DCD27656
DCD27656
DCD87590
我想要的最终产品是一个新变量,如下所示:
DCD00001
DCD00002
DCD00003
DCD00003
DCD00004
谢谢!
更新:
我需要处理原始变量中的一些NA条目,我希望这些条目在新变量中是NA,所以这个
DCD14579
DCD21548
NA
DCD79131
DCD79131
DCD12313
会变成
DCD00001
DCD00002
NA
DCD00003
DCD00003
DCD00004
答案 0 :(得分:3)
我们可以使用sprintf
和match
df1$Col1 <- sprintf("DCD%05d", match(df1$Col1, unique(df1$Col1)))
df1$Col1
#[1] "DCD00001" "DCD00002" "DCD00003" "DCD00003" "DCD00004"
或另一个选项是factor
with(df1, sprintf("DCD%05d", as.integer(factor(Col1, levels = unique(Col1)))))
df1 <- structure(list(Col1 = c("DCD97568", "DCD23547", "DCD27656", "DCD27656",
"DCD87590")), .Names = "Col1", class = "data.frame",
row.names = c(NA, -5L))
答案 1 :(得分:1)
使用data.table
rleid
,感谢您的一些评论,此处假设数据是按顺序排列的,或者可以在数据排序后使用:< / p>
x <- c("DCD97568",
"DCD23547",
"DCD27656",
"DCD27656",
"DCD87590")
new <- paste0("DCD000",data.table::rleid(x))
> new
[1] "DCD0001" "DCD0002" "DCD0003" "DCD0003"
[5] "DCD0004"