如何为非重复行创建唯一标识符?

时间:2018-06-19 20:27:19

标签: r split dplyr tidyr

我正在尝试为该列创建一个标志变量,该变量应随position列的每次出现而改变。例如,这是一个data_frame

df <- data_frame(
  variable = c('Position',
               'Department',
               'Location',
               'Position',
               'Department',
               'Location',
               'Location'
               )
)

df
    # A tibble: 7 x 1
      variable  
      <chr>     
    1 Position  
    2 Department
    3 Location  
    4 Position  
    5 Department
    6 Location  
    7 Location 

如何创建类似于此ID变量的内容?我现在可以拆分此变量,并根据需要合并单元格。

# A tibble: 7 x 2
  variable   id   
  <chr>      <chr>
1 Position   A    
2 Department A    
3 Location   A    
4 Position   B    
5 Department B    
6 Location   B    
7 Location   B  

更好的方法是合并variable列中具有重复项的所有单元格。

2 个答案:

答案 0 :(得分:3)

我们基于'variable'中'Position'元素的出现来创建逻辑vector,获取累积总和(cumsum),然后使用该数字索引更改为LETTERS

library(dplyr)
df %>% 
   mutate(id = LETTERS[cumsum(variable== 'Position')])
# A tibble: 7 x 2
#  variable   id   
#  <chr>      <chr>
#1 Position   A    
#2 Department A    
#3 Location   A    
#4 Position   B    
#5 Department B    
#6 Location   B    
#7 Location   B    

答案 1 :(得分:2)

使用duplicated的基本R方法。我将借用@akrun的方法来设置内置向量LETTERS

LETTERS[duplicated(df$variable) + 1L]
#[1] "A" "A" "A" "B" "B" "B" "B"

因此,您要做的就是将此结果分配给新列。

df$id <- LETTERS[duplicated(df$variable) + 1L]