【问题标题】:How to create unique identifier for non-repetitive rows?如何为非重复行创建唯一标识符?
【发布时间】:2018-11-28 21:23:41
【问题描述】:

我正在尝试为列创建一个标志变量,该变量应随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 列中具有重复项的任何单元格。

【问题讨论】:

    标签: r split dplyr tidyr


    【解决方案1】:

    我们根据“变量”中“位置”元素的出现创建一个逻辑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    
    

    【讨论】:

    • 完美运行!谢谢。
    【解决方案2】:

    基本的 R 方法是使用duplicated。我将借用@akrun 对内置向量LETTERS 进行子集化的想法。

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

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

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

    【讨论】:

    • 我想这应该更快
    猜你喜欢
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-02
    相关资源
    最近更新 更多