【发布时间】:2021-11-24 04:08:30
【问题描述】:
我想根据 lag(=prior) 组中的变量对分组的 df 进行排列/排序。
Group 1应排在b之后,从a1到a4
Group 2a应该按照Group 1b排列
Group 3a应该按照Group 2b排列
示例数据:
dat <- structure(list(group = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L,
3L), a = c("new", "new", "new", "new", "a2", "a1", "a3", "b1",
"b3", "b2"), b = c("a2", "a4", "a3", "a1", "b1", "b2", "b3",
"c", "c", "c")), class = "data.frame", row.names = c(NA, -10L
))
dat1 <- structure(list(group = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L,
3L), a = c("new", "new", "new", "new", "a1", "a2", "a3", "b2",
"b1", "b3"), b = c("a1", "a2", "a3", "a4", "b2", "b1", "b3",
"c", "c", "c")), class = "data.frame", row.names = c(NA, -10L
))
初始数据
dat
#> group a b
#> 1 1 new a2
#> 2 1 new a4
#> 3 1 new a3
#> 4 1 new a1
#> 5 2 a2 b1
#> 6 2 a1 b2
#> 7 2 a3 b3
#> 8 3 b1 c
#> 9 3 b3 c
#> 10 3 b2 c
期望的输出
dat1
#> group a b
#> 1 1 new a1
#> 2 1 new a2
#> 3 1 new a3
#> 4 1 new a4
#> 5 2 a1 b2
#> 6 2 a2 b1
#> 7 2 a3 b3
#> 8 3 b2 c
#> 9 3 b1 c
#> 10 3 b3 c
dplyr 解决方案会更好。不过,我很感激每一个提示。
【问题讨论】:
-
“第 1 组应按照 b 的字母数字顺序排列”。在您想要的输出组中,第 1 组不是按照 b 的字母数字?还是我错过了什么?
-
谢谢。在所需的输出组 1 应该是 a1 到 a4
-
我不确定这是否可以通过
dplyr完成,而无需太多黑客攻击。如果每个组具有不同的自然顺序以及它们之间的关系,那么它们可能应该是 3 个独立的数据帧? -
@DanChaltiel 感谢您的评论。只是为了我的理解,你能解释一下在这种情况下 3 个分离的数据帧背后的逻辑吗?谢谢。