【发布时间】:2021-04-12 12:53:32
【问题描述】:
我有一个如下所示的动物追踪数据集
Id Start Stop Status
78122 10/12/1919 10/12/1919 Birth
78122 1/18/1966 2/2/1972 In
78122 2/3/1972 9/8/1972 In
78122 9/9/1972 1/23/1974 In
78122 1/24/1974 10/22/1975 Out
78122 10/23/1975 5/4/1979 Out
78122 5/5/1979 8/29/1980 Out
78122 8/30/1980 5/14/1988 Out
78122 5/15/1988 6/18/1988 In
78122 6/19/1988 1/12/1989 In
78122 1/13/1989 2/23/1990 In
78122 2/24/1990 6/15/1991 Out
78122 6/16/1991 2/11/1993 Out
78122 2/12/1993 5/3/1994 Out
78122 5/4/1994 7/27/1994 In
78122 7/22/1994 1/25/1996 Out
78122 1/26/1996 11/13/2001 In
78122 11/14/2001 11/19/2001 In
78122 11/20/2001 9/1/2009 In
78122 9/26/2009 9/26/2009 Death
这种动物出生于 1919 年,但多次进出其本土领土。我想要创建的是这样的数据集。我喜欢按状态总结min(Start) 和max(Stop) 日期。
例如:有三行表示动物在1/18/1966 到1/23/1974 之间的区域内。
Id Start Stop Status
78122 1/18/1966 2/2/1972 In
78122 2/3/1972 9/8/1972 In
78122 9/9/1972 1/23/1974 In
这些信息应该用min(Start)和max(Stop)这样总结成1行
Id MinStart MaxStop Status
78122 1/18/1966 1/23/1974 In
在1/24/1974 到5/14/1988 之间再次有四行表明该动物已离开领地。
Id Start Stop Status
78122 1/24/1974 10/22/1975 Out
78122 10/23/1975 5/4/1979 Out
78122 5/5/1979 8/29/1980 Out
78122 8/30/1980 5/14/1988 Out
这些信息应该用min(Start)和max(Stop)这样总结成1行
Id MinStart MaxStop Status
78122 1/24/1974 5/14/1988 Out
对于其他 In 和 Out 状态也是如此。最终数据集应如下所示。
Id MinStart MaxStop Status
78122 10/12/1919 10/12/1919 Birth
78122 1/18/1966 1/23/1974 In
78122 1/24/1974 5/14/1988 Out
78122 5/15/1988 2/23/1990 In
78122 2/24/1990 5/3/1994 Out
78122 5/4/1994 7/27/1994 In
78122 7/28/1994 1/25/1996 Out
78122 1/26/1996 9/1/2009 In
78122 9/26/2009 9/26/2009 Death
有关如何根据上述标准重新排列此数据集的任何建议都非常有用。到目前为止我试过了
test1 <- testcase %>%
group_by(ID,Status) %>%
summarize(MinStart = min(Start), MaxStop= max(Stop))
但这似乎不起作用。它只是为所有 In Status 和 Out Status 一起创建一分钟和停止日期。这是不正确的。
【问题讨论】:
-
在分组之前要做的是创建某种一致的 ID,只要状态不改变,所以第 1 行得到 ID 1,第 2-4 行 ID 2,第 5-行8 ID 3 以此类推,然后您想按此 ID 分组,而不是原来的 ID + 状态。