创建重复行的id列

问题描述 投票:0回答:1

编辑:

我有一个非常简单的问题。我有一个重复行的数据框(已经给出)。我想识别每个唯一的行,并添加带有ID号的列。

原始表有成千上万的行,但是我在这里简化了它。可以以这种方式创建玩具df。

df <- data.frame(var1 = c('a', 'a', 'a', 'b', 'c', 'c', 'a'), 
                 var2 = c('d', 'd', 'd', 'e', 'f', 'f', 'c'))

对于每个唯一行,我要一个数字ID:

  var1 var2  ID
1    a    d   1
2    a    d   1
3    a    d   1
4    b    e   2
5    c    f   3
6    c    f   3
7    a    c   4

/编辑

r rows tidyverse
1个回答
1
投票

一种方法是使用uncount中的tidyr

library(dplyr)
df %>% mutate(ID = row_number()) %>% tidyr::uncount(ID, .remove = FALSE)

#    var1 var2 ID
#1      a    d  1
#2      b    e  2
#2.1    b    e  2
#3      c    f  3
#3.1    c    f  3
#3.2    c    f  3

在基数R中,我们可以在数据框中创建一个行号列,并基于此重复行。

df$ID <- seq(nrow(df))
df[rep(df$ID, df$ID), ]

数据

df <- structure(list(var1 = structure(1:3, .Label = c("a", "b", "c"
), class = "factor"), var2 = structure(1:3, .Label = c("d", "e", 
"f"), class = "factor")), row.names = c(NA, -3L), class = "data.frame")
© www.soinside.com 2019 - 2024. All rights reserved.