我一直试图在群组中复制1和2的二进制输出。
我想要使用rep
和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)
如您所见,输出忽略列cat
。 cat 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
答案 0 :(得分:2)
假设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