【问题标题】:Slicing on Datetime and also keep Rows where only NA is present在日期时间切片并保留仅存在 NA 的行
【发布时间】:2022-01-19 08:27:23
【问题描述】:

我的数据集中有多个重复项,仅考虑一个参数是无法解决的。所以我必须多次切片。

示例数据集:

DF <- data.frame(Object=c("A","A","A","B","B","C","C","C","D","D"),
                 Value = c(4,4,3,4,2,1,4,3,4,2),
                 Datetime = c("2022-01-19 10:01:00","2022-01-19 10:04:00","2022-01-19 10:01:00",NA,"2022-01-19 10:01:00","2022-01-19 10:01:00",NA,NA,"2022-01-19 10:01:00","2022-01-19 10:01:00"))

我按相关变量(由Object 表示)和第一个slice_max 对每行非NA 值的总和进行分组(由Value 表示)。仍有重复:

library(tidyverse)
library(lubridate)

DF %>% 
  mutate(Datetime=ymd_hms(Datetime)) %>% 
  group_by(Object) %>% 
  slice_max(Value)


# A tibble: 5 × 3
# Groups:   Object [4]
  Object Value Datetime           
  <chr>  <dbl> <dttm>             
1 A          4 2022-01-19 10:01:00
2 A          4 2022-01-19 10:04:00
3 B          4 NA                 
4 C          4 NA                 
5 D          4 2022-01-19 10:01:00

之后我想考虑一个日期时间。我想保留具有最小日期时间的行,但是如果组中没有具有当前值的行(只有 NA),我仍然想保留它。 Slice_min 删除仅存在 NA 值的组。缺少 B 组和 C 组。

# A tibble: 2 × 3
# Groups:   Object [2]
  Object Value Datetime           
  <chr>  <dbl> <dttm>             
1 A          4 2022-01-19 10:01:00
2 D          4 2022-01-19 10:01:00

如何在日期时间切片并保留不存在值的组行?

【问题讨论】:

    标签: r


    【解决方案1】:

    在这个Post 中,描述了使用filter| 运算符的一般方法。它也适用于日期时间。

    DF %>% 
      mutate(Datetime=ymd_hms(Datetime)) %>% 
      group_by(Object) %>% 
      slice_max(Value) %>% 
      filter(Datetime == min(Datetime) | is.na(Dateime))
    
    # A tibble: 4 × 3
    # Groups:   Object [4]
      Object Value Datetime           
      <chr>  <dbl> <dttm>             
    1 A          4 2022-01-19 10:01:00
    2 B          4 NA                 
    3 C          4 NA                 
    4 D          4 2022-01-19 10:01:00
    
    

    重要的是过滤器参数的语法。一开始我有一个错误的语法,错过了Datetime==,这给我留下了一条错误消息,提示| 运算符不适用于日期时间:

    DF %>% 
      mutate(Datetime=ymd_hms(Datetime)) %>% 
      group_by(Object) %>% 
      slice_max(Value) %>% 
      filter(min(Datetime) | is.na(Datetime))
    
    Fehler: Problem with `filter()` input `..1`.
    ℹ Input `..1` is `min(Datetime) | is.na(Datetime)`.
    x '|' not defined for "POSIXt" objects
    ℹ The error occurred in group 1: Object = "A".
    Run `rlang::last_error()` to see where the error occurred.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-28
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 2016-04-16
      相关资源
      最近更新 更多