编辑:
我有一个非常简单的问题。我有一个重复行的数据框(已经给出)。我想识别每个唯一的行,并添加带有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
/编辑
一种方法是使用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")
[这里是使用cumsum
+ duplicated
,即,]的基本R解决方案>
df$ID <- cumsum(!duplicated(df))
诸如此类
> df
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