使用R将值重新编码为新变量

时间:2017-05-03 16:20:46

标签: r recode

我有一个带变量的数据集,我需要通过重新编码到另一个变量来更改匿名。 有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

2 个答案:

答案 0 :(得分:3)

我们可以使用sprintfmatch

执行此操作
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"