【发布时间】:2018-04-13 20:57:04
【问题描述】:
我有一个这样的数据框:
df <- data.frame(grouping = c(rep("site1_1",9), rep("site2_1",9)),
var = c(rep("P", 3), rep("G", 3), rep("B",3),rep("P", 3), rep("B", 3), rep("G",3)),
order= c(rep(0, 3), rep(1, 3), rep(2,3),rep(0, 3), rep(1, 3), rep(2,3)))
grouping var order
1 site1_1 P 0
2 site1_1 P 0
3 site1_1 P 0
4 site1_1 G 1
5 site1_1 G 1
6 site1_1 G 1
7 site1_1 B 2
8 site1_1 B 2
9 site1_1 B 2
10 site2_1 P 0
11 site2_1 P 0
12 site2_1 P 0
13 site2_1 B 1
14 site2_1 B 1
15 site2_1 B 1
16 site2_1 G 2
17 site2_1 G 2
18 site2_1 G 2
我有一列表示一个名为 Grouping 的唯一 ID(从不重复)。在每个分组中,我有 3 个变量(P、G 和 B)。如上所示,它们确实在一个分组中重复多次。
顺序始终为 P,G,B 或 P,B,G。在一个组内 P 总是 0,B/G 要么是 1 要么是 2。它们在一个组内永远不可能是 1 和 2,而在组之间,B 或 G 是 1 还是 2 是随机的。
我有一个 order 列来显示 var 在每个组中的顺序
我想添加一个新列,根据 B 是否在 G 之前或反之亦然来标记整个分组(P、B 和 G)。
这是一个示例:
grouping var order label
1 site1_1 P 0 Gfirst
2 site1_1 P 0 Gfirst
3 site1_1 P 0 Gfirst
4 site1_1 G 1 Gfirst
5 site1_1 G 1 Gfirst
6 site1_1 G 1 Gfirst
7 site1_1 B 2 Gfirst
8 site1_1 B 2 Gfirst
9 site1_1 B 2 Gfirst
10 site2_1 P 0 Bfirst
11 site2_1 P 0 Bfirst
12 site2_1 P 0 Bfirst
13 site2_1 B 1 Bfirst
14 site2_1 B 1 Bfirst
15 site2_1 B 1 Bfirst
16 site2_1 G 2 Bfirst
17 site2_1 G 2 Bfirst
18 site2_1 G 2 Bfirst
我不清楚如何做到这一点。
使用 dplyr 我开始
df %>% group_by(分组) %>% mutate(label = .......
但是在这里之后,我不知道如何指定标签以 P、B 和 G 的顺序为条件,以及如何解释它们在每个组中重复多次的事实。
我参加了这个交流:
[How can I create a new column in a dataframe based on permutations of other columns?
但我不清楚如何采用答案,因为我需要按分组列对它们进行分组,并且需要考虑每个变量内不同数量的排列(可以有 3-15 个 P、B 和 G 的范围在每个分组中。
非常感谢任何帮助。
【问题讨论】: