当前位置: 首页 > 知识库问答 >
问题:

计算每组日期之间的平均天数

佴普松
2023-03-14

我的数据如下:

year group date 
2019 A     2019-07-15
2019 A     2019-07-25
2019 A     2019-08-01
2019 B     2019-07-15
2019 B     2019-07-30
2020 A     2020-08-01
2020 A     2020-08-03
2020 B     2020-08-01
2020 B     2020-08-20
2020 B     2020-08-25

我想计算每个组每年日期之间的平均天数。我尝试了以下代码,但收到以下错误:

data_meandays <- data %>%
  group_by(year, group)%>% 
  mutate(Difference = date - lag(date)) %>%
  summarize(mean_time = mean(Difference, na.rm=TRUE))

Error in date - lag(date) : 
  non-numeric argument to binary operator

我的日期列的类别是日期。

共有1个答案

柴赞
2023-03-14

发生错误,因为date列是字符,而不是date类。我们需要先转换为<code>Date</code>类,然后再进行差异处理

library(dplyr)
data %>%
   mutate(date = as.Date(date)) %>% 
   group_by(year, group) %>% 
   mutate(Difference = date - lag(date)) %>% 
   summarize(mean_time = mean(Difference, na.rm=TRUE), .groups = 'drop')

-输出,输出

# A tibble: 4 × 3
   year group mean_time
  <int> <chr> <drtn>   
1  2019 A      8.5 days
2  2019 B     15.0 days
3  2020 A      2.0 days
4  2020 B     12.0 days

注意:日期s 之间的差异的输出是 difftime 对象。如果我们想转换为数字类,它将是应用于列的 as.numeric

如果我们不转换到< code>Date类,则OP的错误会重现

data %>%  
  group_by(year, group)%>%  
  mutate(Difference = date - lag(date)) %>%  
  summarize(mean_time = mean(Difference, na.rm=TRUE))

突变 () 中的错误: !计算时出现问题 差异 = 日期 - 滞后(日期)。i 错误发生在组 1:年份 = 2019,组 = “A”。由日期错误导致 - 滞后(日期):!二进制运算符的非数字参数 运行 rlang::last_error() 以查看错误发生的位置

data <- structure(list(year = c(2019L, 2019L, 2019L, 2019L, 2019L, 2020L, 
2020L, 2020L, 2020L, 2020L), group = c("A", "A", "A", "B", "B", 
"A", "A", "B", "B", "B"), date = c("2019-07-15", "2019-07-25", 
"2019-08-01", "2019-07-15", "2019-07-30", "2020-08-01", "2020-08-03", 
"2020-08-01", "2020-08-20", "2020-08-25")), 
class = "data.frame", row.names = c(NA, 
-10L))
 类似资料:
  • 问题内容: 在我的代码中,日期之间的差异是错误的,因为它应该是38天而不是8天。我该如何解决? 问题答案: 问题出在变量中。月以Capital M表示。 尝试更改为: 有关更多信息,请参见此javadoc。 编辑: 这是代码,如果您想以注释的方式打印差异: 希望对您有所帮助!

  • 我怀疑 R 有一个内置方法来做到这一点,但我是编程新手,并试图弄清楚如何手动计算日期之间的天数作为练习。这是我的代码: 我写了一个代码来确定两个日期之间的天数,使用python。我现在正在尝试将其转换为 R 以用于我正在做的另一个作业。当我运行每个单独的功能时,它们似乎工作正常。当我调用daysBetweenDates(2012,1,时,出现以下错误: 第1天出错:二进制运算符的非数字参数

  • 问题内容: 在我的数据库中,我有一个包含两列的表。第一列包含日期,第二列是计数变量。我想知道是否有可能根据日期和计数来计算每个工作日的平均计数。在下面的一个小例子中: 桌子: 输出: 问题答案: 您可以对表达式进行一系列调用以提取当天的名称: 编辑: 鉴于编辑后的帖子中已更新了预期的输出,因此操作起来容易得多-只需按:分组即可:

  • 问题内容: 我编写了以下代码来查找两个日期之间的日期 当开始日期和结束日期分别是2/3/2017和3/3/2017时,显示的天数是29.尽管它们是同一天,但显示的是1.(请假的天数。如果请假一天,他必须选择相同的开始日期和结束日期。因此,在这种情况下,他请了两天假。 我究竟做错了什么?感谢您的时间。 注意:请不要使用日期构造函数。检查下面接受的答案。使用simpledateformat或Joda时

  • 我写了以下代码来查找两个日期之间的日期 当开始日期和结束日期分别为2017年2月3日和2017年3月3日时,显示的天数为29天。虽然当他们在同一天,它是显示1。(一个人休假的天数。因此,如果一个人休假一天,他必须选择相同的开始和结束日期。因此,在这种情况下,他休假两天)。 我做错了什么?谢谢你抽出时间。 注意:请不要使用日期构造函数。检查下面被接受的答案。使用simpledateformat或Jo

  • 问题内容: 我正在计算从“开始”到“结束”日期之间的天数。例如,如果起始日期为2010年4月13日,起始日期为2010年5月15日,则结果应为 如何使用JavaScript获得结果? 问题答案: