【问题标题】:adding grouping indicator for repeating sequences为重复序列添加分组指示符
【发布时间】:2017-11-23 12:06:38
【问题描述】:

我认为这很简单,但失败了,无法从任何地方找到答案。

示例数据如下所示。我从 1:x 开始运行 nro 并在随机点重新启动。我想创建 ind 变量,第一次运行为 1,第二次运行为 2...

tbl <- tibble(nro = c(rep(1:3, 1), rep(1:5, 1), rep(1:4, 1)))

最终结果应如下所示:

tibble(nro = c(rep(1:3, 1), rep(1:5, 1), rep(1:4, 1)),
       ind = c(rep(1, 3), rep(2, 5), rep(3, 4)))

 # A tibble: 12 x 2
     nro   ind
   <int> <dbl>
 1     1     1
 2     2     1
 3     3     1
 4     1     2
 5     2     2
 6     3     2
 7     4     2
 8     5     2
 9     1     3
10     2     3
11     3     3
12     4     3

我以为我可以用 ifelse 做点什么,但惨遭失败。

tbl %>%
  mutate(ind = ifelse(nro < lag(nro), 1 + lag(ind), 1))

我认为这需要某种循环。

【问题讨论】:

  • 你的 1:x 不会从 1:4 运行然后重新启动并从 1:5 运行吗?
  • 没错,会修改
  • cumsum(tbl$nro == 1)
  • 我不知道如何或为什么,但似乎工作。仍将使用真实数据进行测试,请提供答案并给您一些分数。

标签: r dplyr tidyverse


【解决方案1】:

对于相同长度的序列

您可以在您的 nro 变量上使用 group_by,然后只需使用 row_number()

tbl %>% 
  group_by(nro) %>% 
  mutate(ind = row_number())

# A tibble: 12 x 2
# Groups:   nro [4]
#      nro   ind
#    <int> <int>
#  1     1     1
#  2     2     1
#  3     3     1
#  4     4     1
#  5     1     2
#  6     2     2
#  7     3     2
#  8     4     2
#  9     1     3
# 10     2     3
# 11     3     3
# 12     4     3

用于不同长度的序列

灵感来自 docendo discimus 的评论

tbl <- tibble(nro = c(rep(1:3, 1), rep(1:5, 1), rep(1:4, 1)))

tbl %>% 
  mutate(ind = cumsum(nro == 1))

但是,这仅限于以 1 开头的序列,因为仅累积了 nro == 1TRUE 值。

因此,你应该考虑使用这个:

tbl %>% mutate(dif = nro - lag(nro)) %>% 
  mutate(dif = ifelse(is.na(dif), nro, dif)) %>% 
  mutate(ind = cumsum(dif < 0) + 1) %>% 
  select(-dif)

# A tibble: 12 x 2
#      nro   ind
#    <int> <dbl>
#  1     1     1
#  2     2     1
#  3     3     1
#  4     1     2
#  5     2     2
#  6     3     2
#  7     4     2
#  8     5     2
#  9     1     3
# 10     2     3
# 11     3     3
# 12     4     3

【讨论】:

  • 我对长度可能不同的问题不够清楚。将修改问题。不过答案很好。
  • 修复它,我想。告诉我
猜你喜欢
  • 2019-01-23
  • 2022-12-02
  • 1970-01-01
  • 2018-09-10
  • 2020-12-16
  • 2022-01-14
  • 1970-01-01
  • 2021-10-11
  • 2012-11-14
相关资源
最近更新 更多