r - 使用which()查找某些posix时间之间的值并在没有数据时填充NA

标签 r posixct

我有一个看起来像这样的数据框:

dat <- data.frame("posix_time" = as.POSIXct(c("2021-07-01 01:00:00 CEST", "2021-07-01 01:10:00 CEST", "2021-07-01 01:20:00 CEST", 
                                   "2021-07-01 01:30:00 CEST", "2021-07-01 01:40:00 CEST", "2021-07-01 01:50:00 CEST",
                                   "2021-07-01 02:00:00 CEST", "2021-07-01 02:10:00 CEST", "2021-07-01 02:20:00 CEST")),
                  "value" = c(5, 8, 15, 7, 12, 5, 89, 1, 17))

现在我想直接使用哪个函数获取“值”的索引或在本例中的数据。这样做效果很好:

temp <- dat$value[which(dat$posix_time >= "2021-07-01 01:00:00" & dat$posix_time <= "2021-07-01 02:00:00")]

然后应将其写入特定大小的预定义矩阵中:

mat <- matrix(NA, ncol = 15, nrow = 1)

其中 ncol 是时间步数。这里应该是:

colnames(mat) <- c("00:00", "00:10", "00:20", "00:30", "00:40", "00:50", "01:00", "01:10", "01:20", "01:30", "01:40", "01:50", "02:00", "02:10", "02:20")

现在我想将与 dat 中的正确时间相对应的值写入矩阵中。但我不知道该怎么做。

它应该看起来像这样:

00:00 00:10 00:20 00:30 00:40 00:50 01:00 01:10 01:20 01:30 01:40 01:50 02:00 02:10 02:20
NA    NA    NA    NA    NA    NA     5     8    15     7    12     5    89    NA    NA

最佳答案

dat <- dat[which(dat$posix_time >= "2021-07-01 01:00:00" & dat$posix_time <= "2021-07-01 02:00:00"), ]
mat[match(gsub("^.* (\\d{2}:\\d{2}).*$", "\\1", dat$posix_time), colnames(mat))] <- dat$value

#     00:00 00:10 00:20 00:30 00:40 00:50 01:00 01:10 01:20 01:30 01:40 01:50 02:00 02:10 02:20
#[1,]    NA    NA    NA    NA    NA    NA     5     8    15     7    12     5    89    NA    NA

关于r - 使用which()查找某些posix时间之间的值并在没有数据时填充NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75484033/

相关文章:

r - 基于分类变量,在 R 中从数据框中子集 n 行

r - 使用 lm 指定具有选定项的模型

r - R 中 seq 函数生成时间缺少小时?

r - 从 R 中的 POSIXct 中提取 2 位数小时

r - 解析时间戳 - AM/PM 无法识别

r - R ifelse 是否可以正确处理空向量?

r - 在 R 中创建 "Week_Start"变量

r - 如何确定包含简并子串的字母的可能组合数

r - 将时区添加到 data.table 中的 POSIXct 对象

r - R 中是否有一个函数可以根据年份日期对值求和?