【问题标题】:Eliminate duplicate dates in dataframe in R消除R中数据框中的重复日期
【发布时间】:2018-07-12 16:02:19
【问题描述】:

我有一个如下所示的数据框。如何获得一个消除重复日期的新数据框:2018 年 6 月 15 日和 2018 年 6 月 28 日,并拥有一个只有唯一值的数据框

 Date        Hrs
6/14/2018   364.8
6/15/2018   372.6
6/15/2018   381.9
6/21/2018   383.3
6/22/2018   394.5
6/25/2018   411
6/28/2018   423.9
6/28/2018   424.9

【问题讨论】:

  • 如何判断 6/15 的两个值中的哪一个?
  • 您要删除哪些 Hrs 记录存在重复项?到目前为止,您尝试过什么?
  • Remove duplicated rows的可能重复

标签: r date dataframe unique


【解决方案1】:

假设您只想保留两个重复项的第一行:

df <- df[!duplicated(df[c('date')]),]

df

##     date   hrs
##6/14/2018 364.8
##6/15/2018 372.6
##6/21/2018 383.3
##6/22/2018 394.5
##6/25/2018 411.0
##6/28/2018 423.9

【讨论】:

  • 亲爱的,如果我想保留第二行的两个副本,你能帮我吗
【解决方案2】:

1) 动物园 您可以使用read.zoo 并像这样指定aggregate 函数来创建没有重复的动物园系列。在示例中,我们假设您想要所有重复项中的最后一个,但我们可以使用 meanmedianfunction(x) head(x, 1) 或其他函数来处理其他聚合。

library(zoo) 
z <- read.zoo(DF, format = "%m/%d/%Y", aggregate = function(x) tail(x, 1))

现在plot(z)lattice::xyplot(z)ggplot2::autoplot(z) 将绘制它,fortify.zoo(z) 将其转换为数据框等。

2) base 我们可以像这样在 base 中使用aggregate

DF2 <- transform(DF, Date = as.Date(Date, "%m/%d/%Y"))
aggregate(Hrs ~ Date, DF2, function(x) tail(x, 1))

或者我们可以使用 (1) 中提到的任何聚合函数。

## Note

Lines <- " Date        Hrs
6/14/2018   364.8
6/15/2018   372.6
6/15/2018   381.9
6/21/2018   383.3
6/22/2018   394.5
6/25/2018   411
6/28/2018   423.9
6/28/2018   424.9"
DF <- read.table(text = Lines, header = TRUE)

【讨论】:

  • 在数据框中,日期为 Y-m-d 格式,我收到以下错误 > z
  • 如果您将注释中最后的代码粘贴到 R 中,然后将代码粘贴到答案中,那么它可以工作。如果我运行它创建带有 yyyy/mm/dd 日期的 DF3,它也可以工作。 DF3 &lt;- transform(DF, Date = format(as.Date(Date, "%m/%d/%Y"), "%Y/%m/%d")); z &lt;- read.zoo(DF3, format = "%Y/%m/%d", aggregate = function(x) tail(x, 1))你需要提供一个可重复的例子来说明更多。
猜你喜欢
  • 2021-11-13
  • 1970-01-01
  • 1970-01-01
  • 2016-07-31
  • 2017-03-06
  • 2020-04-03
  • 1970-01-01
  • 1970-01-01
  • 2016-11-02
相关资源
最近更新 更多