【问题标题】:Set unique IDs which start from zero in R data.frame在 R data.frame 中设置从零开始的唯一 ID
【发布时间】:2020-08-03 15:59:51
【问题描述】:

我有一个看起来像这样的数据框

column1
 1
 1
 2
 3
 3

我想给每个元素一个唯一的 ID。我的问题是我不能 找到一种方法让唯一 ID 从零开始并像这样

column1 column2
 1        0
 1        0
 2        1
 3        2
 3        2

感谢任何帮助

【问题讨论】:

  • 这两个column1 的样本数据不同。无论如何,您可以尝试在创建组时插入-1
  • 谢谢@RicS 我会改的

标签: r dplyr unique tidyverse


【解决方案1】:

试试这个,dplyr 中的cur_group_id 将从 1 开始创建 id,但您可以轻松地将其从 0 开始:

library(dplyr)
#Data
df <- structure(list(column1 = c(0L, 1L, 2L, 3L, 3L)), class = "data.frame", row.names = c(NA,-5L))
#Mutate
df %>% group_by(column1) %>% mutate(id=cur_group_id()-1)

# A tibble: 5 x 2
# Groups:   column1 [4]
  column1    id
    <int> <dbl>
1       0     0
2       1     1
3       2     2
4       3     3
5       3     3

【讨论】:

  • 还是用dplyr,有一个稍微短一点的办法:df$column2 &lt;- group_indices(df, column1) - 1
【解决方案2】:

我们可以使用match

library(dplyr)
df1 %>% 
     mutate(column2 = match(column1, unique(column1)) - 1)

数据

df1 <- structure(list(column1 = c(1L, 1L, 2L, 3L, 3L)), class = "data.frame",
row.names = c(NA, 
-5L))

【讨论】:

  • 这也是一个非常简洁的解决方案。谢谢@akrun
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-29
  • 1970-01-01
  • 2021-06-13
  • 1970-01-01
  • 2011-09-10
  • 2019-02-25
  • 1970-01-01
相关资源
最近更新 更多