我有一個帶有 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/A2020-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"
但毫不奇怪,這不起作用。我怎樣才能解決這個問題?
uj5u.com熱心網友回復:
您的日期列在“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
uj5u.com熱心網友回復:
您的基本 R 代碼不起作用,因為
- 您沒有指定應該更改哪一列的值
- 您正在使用 an
|而不是 an& - 在邏輯運算子之后,您需要重復要評估的向量
- 您沒有告訴 R 這些字串是日期時間。
Langtang的解決方案非常巧妙。dplyr使用and的另一個選項lubridate是:
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")
))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/452721.html
