【问题标题】:select earliest date and latest date dependant on ID column in R根据 R 中的 ID 列选择最早日期和最晚日期
【发布时间】:2020-07-23 10:20:05
【问题描述】:

数据集

structure(list(x = c(1, 5, 2, 2, 4, 2, 5, 5, 4, 2, 1, 4, 3, 5, 
4, 1, 2, 3, 1, 3), y = structure(c(13520, 17333, 17422, 17096, 
17096, 18140, 11899, 11759, 17422, 15302, 12547, 17096, 17152, 
17096, 12547, 11423, 15302, 17422, 13867, 12547), class = "Date")), row.names = c(23L, 
87L, 55L, 38L, 40L, 115L, 27L, 135L, 53L, 122L, 11L, 48L, 61L, 
46L, 12L, 83L, 127L, 49L, 104L, 1L), class = "data.frame")

我想找到 1-4 的最晚日期,但 5 我想找到最早的日期。

我可以按数字对它们进行子集化并运行两个单独的查询:

less_than_5 <- subset(df, x <5)
g <- setDT(less_than_5)[,.SD[which.max(y)]. keyby = x,]

然后对x == 5 执行相同操作并运行which.min(y)

我想知道是否可以在一行中完成整个查询,而不是将 1-4 和 5 作为单独的查询进行子集化。

更新:

如果每一行都附加了一个参与者 ID,其中一些是重复的,有没有办法使用 keyby 功能来做到这一点。对于每个参与者,我想知道提到 1:4 的最新日期。但是,如果是 5,那么我想知道最早的日期。

【问题讨论】:

    标签: r dataframe subset minmax


    【解决方案1】:

    你可以使用if/else

    library(data.table)
    setDT(df)[, if(first(x) != 5) max(y) else min(y), x]
    
    #   x         V1
    #1: 1 2007-12-20
    #2: 5 2002-03-13
    #3: 2 2019-09-01
    #4: 4 2017-09-13
    #5: 3 2017-09-13
    

    【讨论】:

    • 抱歉,我忘记了问题的关键部分,很快就会重新发布
    • 如果每一行都附加了一个参与者 ID,其中一些是重复的,有没有办法使用 keyby 功能来做到这一点。对于每个参与者,我想知道提到 1:4 的最新日期。但是,如果是 5,那么我想知道最早的日期。
    • 对不起,我不太明白。你能用相关的例子和输出更新你的帖子吗?
    猜你喜欢
    • 2017-02-18
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 2021-09-29
    • 2010-10-21
    • 2016-12-18
    • 2021-08-11
    相关资源
    最近更新 更多