gpt4 book ai didi

r - 如何在R中合并两个不同长度的向量

转载 作者:行者123 更新时间:2023-12-04 13:29:22 25 4
gpt4 key购买 nike

我定期进行了一组测量,但是缺少一些:

      measurement_date value
1 2011-01-17 13:00:00 5
2 2011-01-17 13:04:00 5
3 2011-01-17 13:08:00 7
4 2011-01-17 13:12:00 8
5 2011-01-17 13:16:00 4
6 2011-01-17 13:24:00 6
7 2011-01-17 13:28:00 5
8 2011-01-17 13:32:00 6
9 2011-01-17 13:36:00 9
10 2011-01-17 13:40:00 8
11 2011-01-17 13:44:00 6
12 2011-01-17 13:48:00 6
13 2011-01-17 13:52:00 4
14 2011-01-17 13:56:00 6

我有一个要处理值并可以处理缺失值的函数,但是该行必须在那儿,所以我正在生成一个数组,每分钟都有一行,如下所示:
times <- timeSequence(from=.., length=60, by="min")

现在,我每小时的每一分钟都有一行,但是我需要合并数据。我尝试过类似的方法,但无法完全正确:
lapply(times, function(time) {
n <- as.numeric(time)
v <- Position(function(candidate) {
y <- as.numeric(candiated)
n == y
}

.. insert the value into the row here ..
}

但我只会收到错误和警告。我能以正确的方式解决问题吗?我真的想要一个“完整”的数组,每分钟的值,因为将运行许多不同的功能来读取读数,并且如果他们可以假设所有读数都在其中,则可以更轻松地实现它们。

最佳答案

DF <- data.frame(measurement_date = seq(as.POSIXct("2011-01-17 13:00:00"),
as.POSIXct("2011-01-17 13:56:00"),
by = "mins")[seq(1, 57, by = 4)][-6],
value = c(5,5,7,8,4,6,5,6,9,8,6,6,4,6))
full <- data.frame(measurement_date = seq(as.POSIXct("2011-01-17 13:00:00"),
by = "mins", length = 60),
value = rep(NA, 60))

可以使用两种方法,第一种通过 merge:
> v1 <- merge(full, DF, by.x = 1, by.y = 1, all = TRUE)[, c(1,3)]
> names(v1)[2] <- "value" ## I only reset this to pass all.equal later
> head(v1)
measurement_date value
1 2011-01-17 13:00:00 5
2 2011-01-17 13:01:00 NA
3 2011-01-17 13:02:00 NA
4 2011-01-17 13:03:00 NA
5 2011-01-17 13:04:00 5
6 2011-01-17 13:05:00 NA

第二个是通过使用 %in%派生的指标变量:
> want <- full$measurement_date %in% DF$measurement_date
> full[want, "value"] <- DF[, "value"]
> head(full)
measurement_date value
1 2011-01-17 13:00:00 5
2 2011-01-17 13:01:00 NA
3 2011-01-17 13:02:00 NA
4 2011-01-17 13:03:00 NA
5 2011-01-17 13:04:00 5
6 2011-01-17 13:05:00 NA
> all.equal(v1, full)
[1] TRUE

首选 合并版本,强烈建议,但是需要一些工作。 %in%解决方案仅在此处工作,因为数据按 DFfull的时间顺序排列,因此是我之前的“首选”。但是,按时间顺序获取/确保两个对象很容易,因此这两种方法都需要一些技巧来工作。我们可以修改 %in%方法来依次获取两个变量(从 full重新开始):
full2 <- data.frame(measurement_date = seq(as.POSIXct("2011-01-17 13:00:00"),
by = "mins", length = 60),
value = rep(NA, 60))
full2 <- full2[order(full2[,1]), ] ## get full2 in order
DF2 <- DF[order(DF[,1]), ] ## get DF in order
want <- full$measurement_date %in% DF$measurement_date
full2[want, "value"] <- DF2[, "value"]

> all.equal(full, full2)
[1] TRUE
> all.equal(full2, v1)
[1] TRUE
>

关于r - 如何在R中合并两个不同长度的向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4723424/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com