R 从唯一行创建新列(散列列)

R creating a new column from unique rows (hashing a column)

我有一个像

这样的数据框
id          val
3243        A
3420        B
8428        A
3420        C
9000        D

我想按顺序创建一个基于唯一 ID 的新列,这样

 id        val          transformed_id
 3243         A                   1
 3420         B                   2
 8428         A                   3
 3420         C                   2
 9000         D                   4

我真的对此一窍不通,我看了transformunique,可以在python中想到一个解决方案,但不能将其转换为R。

我们可以使用matchfactor

我们 match 'id' 列与 'id' 的 unique 个元素来获取数字索引。

 df1$transformed_id <- match(df1$id, unique(df1$id))

或者我们将 'id' 转换为 factor class,将 levels 指定为 'id' 的 unique 值(在本例中它应该在不指定 levels 的情况下工作,但通常指定 levels 会更正确)并转换为 numeric.

 df1$transformed_id <- as.numeric(factor(df1$id, levels=unique(df1$id)))
 df1
 #    id val transformed_id
 #1 3243   A              1
 #2 3420   B              2
 #3 8428   A              3
 #4 3420   C              2
 #5 9000   D              4

数据

df1 <- structure(list(id = c(3243L, 3420L, 8428L, 3420L, 9000L),
val = c("A", 
"B", "A", "C", "D")), .Names = c("id", "val"), class = "data.frame",
row.names = c(NA, -5L))