如何根据 R 中不同列中的 date/time 范围更改 1 列中的值

How to change values in 1 column based of date/time range in a different column in R

我有一个包含 DATE/TIME 列和一个包含一些数值的列的数据框。我想根据记录的 DATE/TIME 范围将一些数值更改为 "N/A"

这就是我的 dataframe 的样子

df = structure(list(Date_Time_GMT_3 = structure(c(1592226000, 1592226900, 
                                                  1592227800, 1592228700, 1592229600, 1592230500), class = c("POSIXct", 
                                                                                                             "POSIXt"), tzone = "EST"), diff_20676892_AIR_X3lh = c(NA, 0.385999999999999, 
                                                                                                                                                                   0.193, 0.290000000000001, 0.385, 0.576000000000001), diff_20819828_B1LH_DOUBLE_CHECK = c(NA, 
                                                                                                                                                                                                                                                            0, 0, 0, 0.0949999999999989, 0)), row.names = c(NA, 6L), class = "data.frame")

我想将 diff_20819828_B1LH_DOUBLE_CHECK 的所有值更改为 N/A,如果它们介于 2020-06-15 08:30:002020-06-15 09:00:00

之间

我试过这个代码

df[df$Date_Time_GMT_3 > "2020-06-15 08:30:00"| < "2020-06-15 09:00:00"] = "NA"

但毫不奇怪,这不起作用。我该如何解决这个问题?

您的日期列在“EST”中,因此您可以这样做:

df[df$Date_Time_GMT_3 > as.POSIXct("2020-06-15 08:30:00", tz="EST") &
     df$Date_Time_GMT_3 < as.POSIXct("2020-06-15 09:00:00", tz="EST"),3] <- NA

      Date_Time_GMT_3 diff_20676892_AIR_X3lh diff_20819828_B1LH_DOUBLE_CHECK
1 2020-06-15 08:00:00                     NA                              NA
2 2020-06-15 08:15:00                  0.386                           0.000
3 2020-06-15 08:30:00                  0.193                           0.000
4 2020-06-15 08:45:00                  0.290                              NA
5 2020-06-15 09:00:00                  0.385                           0.095
6 2020-06-15 09:15:00                  0.576                           0.000

请注意,在这些时间之间只有一行,第 4 行及以上将此类行的第 3 列中的值更改为 NA

您的基本 R 代码无法正常工作,因为

  1. 您没有指定应更改哪一列的值
  2. 您使用的是 | 而不是 &
  3. 在逻辑运算符之后,您需要重复要评估的向量
  4. 你没有告诉 R 这些字符串是 date-times.

浪塘的解决方案很巧妙。使用 dplyrlubridate 的另一个选项是:

library(dplyr)
library(lubridate)
df %>% mutate(diff_20819828_B1LH_DOUBLE_CHECK = na_if(
  diff_20819828_B1LH_DOUBLE_CHECK,
  Date_Time_GMT_3 %within% interval("2020-06-15 08:30:00", "2020-06-15 09:00:00")
))