为一定数量的行创建唯一的重复发生变量

时间:2019-06-21 03:08:16

标签: r dplyr

我正在寻找创建一个ID变量,以便可以将2行分组在一起以标识没有两对相同。

当前我的数据框看起来像这样

Column a     Column b     Column c

Tom            K             Adam
Greg           R             Adam
Troy           K             Lisa
Daniel         R             Lisa
John           K             Greg
Tom            R             Greg
Lisa           K             Adam
Greg           R             Adam

我希望它包括一个具有唯一ID变量的额外列,以便每对行(根据c列)可以组合在一起。

例如

Column a     Column b     Column c     Column d

Tom            K             Adam        3226
Greg           R             Adam        3226
Troy           K             Lisa        3227
Daniel         R             Lisa        3227
John           K             Greg        3228
Tom            R             Greg        3228
Tom            K             Adam        3229
Greg           R             Adam        3229

重要的是,亚当在列c中出现了4次,但他的名字的每对配对都会创建一个新的唯一ID

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我们可以检查'Columnc'的相邻行元素是否相等,获得逻辑向量的累加和并加3226

library(dplyr)
df1 %>% 
    mutate(Columnd =  3226 + cumsum(Columnc != lag(Columnc,
           default = first(Columnc))))
#   Columna Columnb Columnc Columnd
#1     Tom       K    Adam    3226
#2    Greg       R    Adam    3226
#3    Troy       K    Lisa    3227
#4  Daniel       R    Lisa    3227
#5    John       K    Greg    3228
#6     Tom       R    Greg    3228
#7    Lisa       K    Adam    3229
#8    Greg       R    Adam    3229

或者使用base R的{​​{1}}

rle

数据

df1$Columnd <-  with(rle(df1$Columnc), rep(seq_along(values), lengths))