【问题标题】:group data which are either 0 or 1 [duplicate]组数据为 0 或 1 [重复]
【发布时间】:2021-08-01 11:22:36
【问题描述】:

我有一个向量Blinks,其值为01

df <- data.frame(
  Blinks = c(0,0,1,1,1,0,0,1,1,1,1,0,0,1,1)
)

我想为Blinks == 1 插入一个分组变量。我为此使用rleid,但分组似乎在Blinks == 0

library(dplyr)
library(data.table)
df %>%
  mutate(Blinks_grp = ifelse(Blinks > 0, rleid(Blinks), Blinks))
       Blinks Blinks_grp
    1       0          0
    2       0          0
    3       1          2
    4       1          2
    5       1          2
    6       0          0
    7       0          0
    8       1          4
    9       1          4
    10      1          4
    11      1          4
    12      0          0
    13      0          0
    14      1          6
    15      1          6

我怎样才能得到正确的结果

    1       0          0
    2       0          0
    3       1          1
    4       1          1
    5       1          1
    6       0          0
    7       0          0
    8       1          2
    9       1          2
    10      1          2
    11      1          2
    12      0          0
    13      0          0
    14      1          3
    15      1          3

【问题讨论】:

  • 如果Blinks 是二进制的,rleid(Blinks)/2 不会解决问题吗? [去检查...]是的,它会的。
  • @Limey ...不过不是很笼统,rleid(c(1, 1, 0, 0, 1, 1)) / 2
  • @Henrik。真的。包装在ceiling() 中会处理目标值在向量的第一个元素中的情况。因此,对于 x &lt;- c(1, 1, 0, 0, 1, 1),就像在您的反例中一样,ceiling(ifelse(x &gt; 0, rleid(x)/2, x)) 简洁地给出了所需的结果,而不会更改 OP 用例的结果。
  • 确实!或者更紧凑的ceiling(rleid(x) * x / 2)。干杯

标签: r dplyr


【解决方案1】:

一个选项可能是:

df %>%
 mutate(Blinks_grp = with(rle(Blinks), rep(cumsum(values) * values, lengths)))

   Blinks Blinks_grp
1       0          0
2       0          0
3       1          1
4       1          1
5       1          1
6       0          0
7       0          0
8       1          2
9       1          2
10      1          2
11      1          2
12      0          0
13      0          0
14      1          3
15      1          3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-12
    • 2018-02-23
    • 2019-12-03
    • 2017-07-19
    • 2015-01-08
    • 2012-10-25
    • 2015-05-09
    相关资源
    最近更新 更多