1

我一直在尝试在组内复制 1 和 2 的二进制输出。我想使用repand dplyr,但我似乎无法理解如何rep在组内应用。我已经能够通过手动分离分组并指定每个组的正确范围来做到这一点。我想知道如何rep使用dplyr.

这是一个示例数据。

df <- data.frame(date = c("2017-01-01", "2017-01-01", "2017-01-01", "2017-01-01", "2017-01-01", "2017-01-01", "2017-01-01", "2017-01-02", "2017-01-02", "2017-01-02", "2017-01-02", "2017-01-02", "2017-01-02", "2017-01-02", "2017-01-02", "2017-01-02", "2017-01-02", "2017-01-02"),
                 loc =c("AB", "AB", "AB", "AB", "AB", "AB", "AB", "AB", "CD", "CD", "CD", "CD", "CD", "CD", "CD", "CD", "CD", "CD"),
                 cat = c("a", "a", "a", "b", "b", "b", "b", "b", "c", "c", "c", "c", "c", "d", "d", "d", "d", "d"))

这基本上是我在整个数据集上应用的每个分组运行的代码。

df$type <- rep(1:2,nrow(df)/2)

如您所见,输出忽略了 column catcat b & d应该从 1 开始。

         date loc cat type
1  2017-01-01  AB   a    1
2  2017-01-01  AB   a    2
3  2017-01-01  AB   a    1
4  2017-01-01  AB   b    2
5  2017-01-01  AB   b    1
6  2017-01-01  AB   b    2
7  2017-01-01  AB   b    1
8  2017-01-02  AB   b    2
9  2017-01-02  CD   c    1
10 2017-01-02  CD   c    2
11 2017-01-02  CD   c    1
12 2017-01-02  CD   c    2
13 2017-01-02  CD   c    1
14 2017-01-02  CD   d    2
15 2017-01-02  CD   d    1
16 2017-01-02  CD   d    2
17 2017-01-02  CD   d    1

更新:这是所需的输出。

        date loc cat type
1  2017-01-01  AB   a    1
2  2017-01-01  AB   a    2
3  2017-01-01  AB   a    1
4  2017-01-01  AB   b    1
5  2017-01-01  AB   b    2
6  2017-01-01  AB   b    1
7  2017-01-01  AB   b    2
8  2017-01-02  AB   b    1
9  2017-01-02  CD   c    1
10 2017-01-02  CD   c    2
11 2017-01-02  CD   c    1
12 2017-01-02  CD   c    2
13 2017-01-02  CD   c    1
14 2017-01-02  CD   d    1
15 2017-01-02  CD   d    2
16 2017-01-02  CD   d    1
17 2017-01-02  CD   d    2
4

1 回答 1

3

假设这cat是这里唯一相关的分组变量(不是日期和位置),您可以执行以下操作:

library(dplyr)
df = df %>%
    group_by(cat) %>%
    mutate(type = rep(1:2, length.out = length(cat)))
# Output:
         date    loc    cat  type
       <fctr> <fctr> <fctr> <int>
1  2017-01-01     AB      a     1
2  2017-01-01     AB      a     2
3  2017-01-01     AB      a     1
4  2017-01-01     AB      b     1
5  2017-01-01     AB      b     2
6  2017-01-01     AB      b     1
7  2017-01-01     AB      b     2
8  2017-01-02     AB      b     1
9  2017-01-02     CD      c     1
10 2017-01-02     CD      c     2
11 2017-01-02     CD      c     1
12 2017-01-02     CD      c     2
13 2017-01-02     CD      c     1
14 2017-01-02     CD      d     1
15 2017-01-02     CD      d     2
16 2017-01-02     CD      d     1
17 2017-01-02     CD      d     2
18 2017-01-02     CD      d     1
于 2017-04-18T01:50:30.050 回答