【发布时间】:2016-04-28 19:14:02
【问题描述】:
我的数据如下所示:
ID CLASS START END
100 GA 3-Jan-15 1-Feb-15
100 G 1-Feb-15 22-Feb-15
100 GA 28-Feb-15 17-Mar-15
100 G 1-Apr-15 8-Apr-15
100 G 10-Apr-15 18-Apr-15
200 FA 3-Jan-14 1-Feb-14
200 FA 1-Feb-14 22-Feb-14
200 G 28-Feb-14 15-Mar-14
200 F 1-Apr-14 20-Apr-14
这是数据:
df <- structure(list(ID = c(100L, 100L, 100L, 100L, 100L, 200L, 200L,
200L, 200L), CLASS = structure(c(4L, 3L, 4L, 3L, 3L, 2L, 2L,
3L, 1L), .Label = c("F", "FA", "G", "GA"), class = "factor"),
START = structure(c(9L, 4L, 7L, 2L, 5L, 8L, 3L, 6L, 1L), .Label = c("1-Apr-14",
"1-Apr-15", "1-Feb-14", "1-Feb-15", "10-Apr-15", "28-Feb-14",
"28-Feb-15", "3-Jan-14", "3-Jan-15"), class = "factor"),
END = structure(c(2L, 8L, 4L, 9L, 5L, 1L, 7L, 3L, 6L), .Label = c("1-Feb-14",
"1-Feb-15", "15-Mar-14", "17-Mar-15", "18-Apr-15", "20-Apr-14",
"22-Feb-14", "22-Feb-15", "8-Apr-15"), class = "factor")), .Names = c("ID",
"CLASS", "START", "END"), class = "data.frame", row.names = c(NA,
-9L))
我想按 ID 列对数据进行分组,然后在 CLASS 列中合并任何连续出现的相同值(按开始日期排序),同时选择最短开始日期和最长结束日期。所以对于 ID 号 100,只有一个实例“G”类是连续的,所以我想将这两行合并为具有 min(START) 和 max(END) 日期的单行。这是一个简单的示例,但在实际数据中,有时需要合并多个连续行。
我尝试了 group_by 然后使用某种排名,但这似乎没有奏效。关于如何解决这个问题的任何建议?这也是我第一次在 SO 上发帖,所以我希望这个问题有意义。
结果应如下所示:
ID CLASS START END
100 GA 3-Jan-15 1-Feb-15
100 G 1-Feb-15 22-Feb-15
100 GA 28-Feb-15 17-Mar-15
100 G 1-Apr-15 18-Apr-15
200 FA 3-Jan-14 22-Feb-14
200 G 28-Feb-14 15-Mar-14
200 F 1-Apr-14 20-Apr-14
【问题讨论】:
-
ID 200 中的两个
FAs 不应该也合并一下吗? -
@CactusWoman 没错!我将编辑表格。
标签: r data.table dplyr