【问题标题】:Select rows with most recent date year wise in R在R中选择具有最近日期年份的行
【发布时间】:2020-12-04 23:31:39
【问题描述】:

我有一个具有多个 ID 的数据框,并且每一行都有一个日期。 我们以一个ID为例

现在我想要创建一个新的数据框,以便为每个 ID 选择每年最近日期的所有行,如下所示

我似乎无法做到这一点。有人可以指导我如何做到这一点

【问题讨论】:

  • do.call(rbind, Filter(function(x){x$Date == max(x$Date)}, with(df, split(within(df, {Date <- as.Date(Date, "%m/%d/%Y")}), paste0(ID, Year)))))

标签: r dataframe


【解决方案1】:

我想你可以试试下面的基本 R 代码

subset(
  transform(df,Date = as.Date(Date,format = "%m/%d/%Y")),
  as.logical(ave(Date,ID,Year,FUN = function(x) max(x)==x))
)

【讨论】:

  • 感谢您的回复,除了上面 akrun 的解决方案外,您的解决方案也在运行中!看到一个问题的多种解决方案真是太好了。我不断学习新事物!干杯!
  • @akrun 好吧,我不认为这是一个骗局。实际上,完全不同的问题。
【解决方案2】:

我们将 'Date' 转换为 Date 类,其中 mdy 来自 lubridate,按 'ID' 分组,'Year' filter 'Date' 为 max 的行

library(dplyr)
library(lubridate)
df1 %>%
     mutate(Date = mdy(Date)) %>%
     group_by(ID, Year) %>%
     filter(Date == max(Date))

【讨论】:

  • 非常感谢,这似乎工作得很好!你是救生员。我什至没想过要使用过滤器。我正在做 mutate 和 group_by 然后不知道下一步该做什么。我是 R 新手,仍在学习。再次感谢!
猜你喜欢
  • 1970-01-01
  • 2015-06-21
  • 1970-01-01
  • 1970-01-01
  • 2015-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多