我有一个连续使用两种技术的测量数据集,这意味着一种技术半小时,另一种技术一小时(以下数据)。
我想比较这两种技术,因此需要从两个数据集中得到一个点(每1.5小时)。
我想获取第5列,其中第2列的第1列和第3列的平均值位于位置第2列,这意味着第16列30时间戳的第4列的平均值为16:00和17:00,以便进行比较第2列和第5列。
答案 0 :(得分:1)
假设注释中显示了DF
。然后,假设您要用最接近的非NA的线性插值替换NA,并简单地扩展非NA来填充开头和结尾的值:
library(zoo)
replace(DF, 2:3, na.approx(DF[-1], rule = 2))
给予:
## V1 V2 V3
## 1 A 1.000000 1.0
## 2 B 1.000000 1.5
## 3 C 1.333333 2.0
## 4 D 1.666667 3.0
## 5 E 2.000000 3.5
## 6 F 2.333333 4.0
## 7 G 2.666667 5.0
## 8 H 3.000000 5.0
如果要获取最接近的NA的平均值,则向前和向后使用na.locf
,然后对它们进行平均,最后使用na.fill
填充四肢。
library(zoo)
replace(DF, 2:3, na.fill(
(na.locf(DF[-1], na.rm = FALSE) +
na.locf(DF[-1], fromLast = TRUE, na.rm = FALSE))/2,
"extend"))
## V1 V2 V3
## 1 A 1.0 1.0
## 2 B 1.0 1.5
## 3 C 1.5 2.0
## 4 D 1.5 3.0
## 5 E 2.0 3.5
## 6 F 2.5 4.0
## 7 G 2.5 5.0
## 8 H 3.0 5.0
另一种方法是使用样条线。参见?na.spline
。
DF <- data.frame(V1 = head(LETTERS, 8), V2 = c(NA, 1, NA, NA, 2, NA, NA, 3),
V3 = c(1, NA, 2, 3, NA, 4, 5, NA))