【问题标题】:R creating a new column from unique rows (hashing a column)R从唯一行创建一个新列(散列一列)
【发布时间】:2015-08-20 10:09:52
【问题描述】:

我有一个类似的数据框

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。

【问题讨论】:

  • 提供dput(df)的输出,方便查看。

标签: r transformation


【解决方案1】:

我们可以使用matchfactor

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

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

或者我们将'id'转换为factor类,指定levels作为'id'的unique值(在这种情况下,它应该在不指定levels的情况下工作,但通常指定@ 987654330@ 会更正确)并转换为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))

【讨论】:

  • 很高兴知道 match 和 unique 的使用。但是最好使用 sort 来包裹 unique。
  • @ShenglinChen 如果你使用sort,顺序会有所不同。我猜 OP 希望它的顺序与数据中的顺序相同
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-06
  • 1970-01-01
  • 2014-09-25
  • 2023-02-23
  • 1970-01-01
  • 1970-01-01
  • 2019-04-17
相关资源
最近更新 更多