Row_number 基于按 R 中其他列排序的多列

标签 r dplyr data.table

假设我有这些数据(按 ID、日期和值排序):

  id   value      Date 
 ---- --------   -----------    
   1    A        2018-03-07     
   1    A        2018-03-26
   1    B        2018-04-01     
   1    B        2018-04-15
   1    C        2018-05-07     
   1    A        2018-06-26

   2    A        2018-03-07     
   2    A        2018-03-26
   2    B        2018-04-01     
   2    C        2018-04-15
   2    C        2018-05-07     
   2    B        2018-06-26
 

可以使用以下代码生成数据:

df <- as.data.frame(cbind( 
                      id = c(1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2), 
                   value = c("A", "A", "B", "B", "C", "A", "A", "A", "B", "C", "C", "B"),
       
                   Date = c("2018-03-27", "2018-03-26", "2018-04-01", "2018-04-15", "2018-05-07", "2018-06-26","2018-03-27", "2018-03-26", "2018-04-01", "2018-04-15", "2018-05-07", "2018-06-26")
                      ))

我想将每个 (N+1) 中的 value 列与同一 id 列中的 N 行进行比较,并添加一个新列来记录行号每一行。如果发生变化,则行号列会在当前数字的基础上加1,例如:

 id     value      Date          Row_Number
 ---- --------   -----------   ----------- 
   1    A        2018-03-07     1
   1    A        2018-03-26     1
   1    B        2018-04-01     2
   1    B        2018-04-15     2
   1    C        2018-05-07     3
   1    A        2018-06-26     4

   2    A        2018-03-07     1
   2    A        2018-03-26     1
   2    B        2018-04-01     2
   2    C        2018-04-15     3
   2    C        2018-05-07     3
   2    B        2018-06-26     4

最佳答案

您可以使用data.table::rleid:

df %>%
  group_by(id) %>%
  mutate(rn = rleid(value))

# A tibble: 12 × 4
# Groups:   id [2]
   id    value Date          rn
   <chr> <chr> <chr>      <int>
 1 1     A     2018-03-27     1
 2 1     A     2018-03-26     1
 3 1     B     2018-04-01     2
 4 1     B     2018-04-15     2
 5 1     C     2018-05-07     3
 6 1     A     2018-06-26     4
 7 2     A     2018-03-27     1
 8 2     A     2018-03-26     1
 9 2     B     2018-04-01     2
10 2     C     2018-04-15     3
11 2     C     2018-05-07     3
12 2     B     2018-06-26     4

关于Row_number 基于按 R 中其他列排序的多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74074679/

相关文章:

r - 如何使用R创建单词共现矩阵

r - 使用 dplyr、group_by、summary 创建 for 循环,并将每个变量的输出保存在列表中

r - 毫秒时间戳作为 data.table 中的键

r - 根据 R 中的条件获取行总和

r - 在 R 中按组执行 Arima 时,因子季节有新级别 4

r - 根据摘要统计过滤掉 data.table 列

R数据表: use function on group except current row

r - 找到一个接近规则的点网格的子集的周长

windows - R for windows : onscreen vs pdf() 中的 TTF/OTF 字体选择

r - 如何在散点图中显示相关系数?