【问题标题】:Display and remove longest n durations by top_n按 top_n 显示和删除最长的 n 个持续时间
【发布时间】:2019-10-31 05:53:12
【问题描述】:

我有来自 csv 文件的如下myDate 的数据:

start                  end
2017-07-22 04:00:00    2017-08-05 04:00:00
2014-05-16 17:00:00    2014-05-25 18:40:00  
2018-12-13 22:00:00    2018-12-18 07:59:59  

我还创建了另一个以天为单位的持续时间列:

library(tidyverse)
myDate$duration <- as.numeric(difftime(parse_datetime(myDate$end, "%Y-%m-%d %H:%M:%S"),
                                       parse_datetime(myDate$start, "%Y-%m-%d %H:%M:%S"),
                                       units = "days"))

我有两个问题:

  1. 我想显示前 n 个持续时间(表示 n = 5),我这样做 top_n(5, myDate$duration) 但我收到了这个错误:

UseMethod("tbl_vars") 中的错误: 'tbl_vars' 没有适用的方法应用于类“c('double', 'numeric')

我该如何解决这个问题?

  1. 如何删除 myDate 中最长 10% 的 duration

【问题讨论】:

  • 您应该提供可重现的数据并指明您使用的软件包。对其他读者会更友好。
  • parse_datetime() 属于readr(但我也在想同样的事情)
  • @DarrenTsai,我正在使用这个library(tidyverse)。我已经编辑了问题
  • @hydradon:top_n 函数:top_n(myDate, 5, duration)

标签: r


【解决方案1】:

问题 1

myDate %>%
  top_n(5, duration)

问题 2

删除持续时间最长的 10% 表示保留持续时间最长的 90%。负时长-duration表示使用递增顺序,即选择前n个最小值。

myDate %>%
  top_frac(1 - 0.1, -duration)

【讨论】:

  • 啊,对。我没有意识到top_n() 没有正确使用。我会删除我的答案,因为很明显,这是正确的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-30
相关资源
最近更新 更多