r - 将一系列测量标准化为 R 中的单个时间线
问题描述
我有 6 组大型测量值,用于在定义的时间段内记录的变量。测量值来自通过处理确定的几个样本。每个集合覆盖相同长度(48 小时)的时间间隔,但采样率是可变的,这是时间序列向量长度不同的原因。我想对 7 组测量值进行标准化,以便对数据进行计算并比较处理(例如 7 个系列的平均值、sd、se 等)。
在示例中,已经有 6 个数据集,rbind
并且显示了前 20 行。df 有 3 列:从 0 到 48h 的小时分数、连续变量的值以及测量所属的周期(1 到 6)。
输出:一个数据帧,每 30 分钟有一个时间点,从 0 到 48 小时(0'、30'、60'、90' 等)、周期数、治疗,以及在测量变量列中,a最初记录的 2 个最接近的测量值之间的插值。
hours NH3_Raw period treatment
1 0.0648130 1089.1048 2 A-
2 0.2134490 2714.9061 1 B-
3 0.2655425 285.1279 2 A+
4 0.3136300 2180.8547 1 B+
5 0.3148610 1091.0609 5 A-
6 0.3155265 246.9763 4 A-
7 0.3155990 382.6315 3 A-
8 0.3156545 606.9789 6 A-
9 0.4562360 241.7223 5 A+
10 0.4570675 196.0806 4 A+
11 0.4571705 186.8204 3 A+
12 0.4572665 426.8417 6 A+
13 0.4644085 1516.0110 2 B-
14 0.5984205 1462.5251 4 B-
15 0.5986460 1318.1283 3 B-
16 0.5992145 2245.7524 5 B-
17 0.5996055 2570.2657 6 B-
18 0.6139253 1069.3496 1 A-
19 0.6645135 1686.3955 2 B+
20 0.7136957 380.8309 1 A+
解决方案
您的样本数据包含一些“治疗”和“时期”的组合,它们只有一个时间和关联的值,因此无法对它们进行插值。我假设你的真实数据有更多的点,但我必须在这里创建一个更大的数据集来显示解决方案。
set.seed(69)
df <- data.frame(hours = sort(runif(6000, 0, 48)),
NH3_Raw = runif(6000, 100, 3000),
period = sample(6, 6000, TRUE),
treatment = rep(c("A+", "A-", "B+", "B-"), 1500),
stringsAsFactors = FALSE)
head(df)
#> hours NH3_Raw period treatment
#> 1 0.006346922 1114.2207 1 A+
#> 2 0.016540099 2676.4284 2 A-
#> 3 0.032535430 2182.8841 6 B+
#> 4 0.035046034 441.9335 3 B-
#> 5 0.040023230 574.9462 6 A+
#> 6 0.040604230 1479.8270 6 A-
我们设置了一个需要插值的时间间隔向量:
desired_times <- seq(0.5, 48, 0.5)
现在我们可以创建一个新的插值数据框,如下所示:
new_df <-
do.call(rbind, lapply(split(df, paste(df$period, df$treatment)), function(x) {
data.frame(hours = desired_times,
NH3_Raw = approx(x$hour, x$NH3_Raw, xout = desired_times)$y,
period = x$period[1],
treatment = x$treatment[1],
stringsAsFactors = FALSE)
}))
new_df <- `rownames<-`(new_df[order(new_df$hours),], seq(nrow(new_df)))
所以你的最终结果应该是这样的:
head(new_df, 40)
#> hours NH3_Raw period treatment
#> 1 0.5 NA 1 A-
#> 2 0.5 2329.8554 1 A+
#> 3 0.5 1713.3148 1 B-
#> 4 0.5 2615.2987 1 B+
#> 5 0.5 530.4198 2 A-
#> 6 0.5 672.4222 2 A+
#> 7 0.5 1792.0053 2 B-
#> 8 0.5 1668.9496 2 B+
#> 9 0.5 1277.4349 3 A-
#> 10 0.5 1879.1142 3 A+
#> 11 0.5 2369.0511 3 B-
#> 12 0.5 1675.3803 3 B+
#> 13 0.5 1418.1820 4 A-
#> 14 0.5 2240.9298 4 A+
#> 15 0.5 2419.5662 4 B-
#> 16 0.5 1347.4588 4 B+
#> 17 0.5 545.1744 5 A-
#> 18 0.5 1791.8705 5 A+
#> 19 0.5 2412.4291 5 B-
#> 20 0.5 1780.1196 5 B+
#> 21 0.5 648.6645 6 A-
#> 22 0.5 1226.1662 6 A+
#> 23 0.5 1301.0647 6 B-
#> 24 0.5 1027.1567 6 B+
#> 25 1.0 1086.5756 1 A-
#> 26 1.0 1852.5523 1 A+
#> 27 1.0 2113.3323 1 B-
#> 28 1.0 1155.8553 1 B+
#> 29 1.0 959.9907 2 A-
#> 30 1.0 2417.1157 2 A+
#> 31 1.0 2499.6144 2 B-
#> 32 1.0 1449.8900 2 B+
#> 33 1.0 153.8517 3 A-
#> 34 1.0 2557.1666 3 A+
#> 35 1.0 990.5809 3 B-
#> 36 1.0 1703.8757 3 B+
#> 37 1.0 2240.0745 4 A-
#> 38 1.0 1448.1141 4 A+
#> 39 1.0 1946.3077 4 B-
#> 40 1.0 904.2440 4 B+
推荐阅读
- php - FullCalendar 在使用 Ajax 时返回错误
- java - 按 ID 对 JSON 数组进行排序
- php - 用“span”元素替换“div”元素
- python - 带有字典 `count_if=1` 的 Pandas 聚合被忽略。
- android - 在 iOS 设备上不可见的 Gmail 插件
- java - Rest Assured - 使用 RestAssured 进行测试时出现操作超时错误。但是相同的端点在浏览器中工作正常
- list - 在 Scheme 中搜索定义的列表
- java - 如何获取列表视图?
- wordpress - YOAST 的自定义永久链接问题 - 在 page-template.php 之前显示 category.php
- pandas - 按类别着色 - plotly scattermapbox