替换R中时间序列数据中的缺失值

时间:2019-03-15 00:12:16

标签: r time-series na zoo

我是R的新手。我希望替换数据中X的缺失值。对于相同的“ SubID”和相同的“ Day”,如何将“ Time” = 1或2时缺少的“ X”值替换为“ X”时的“ X”值

SubID:主题编号

日期:每个主题的日期编号(1,2,3 ... 21)

时间:上午标记为1,下午标记为2,晚上标记为 3

X:仅在“时间”为3时才有一个有效值,而其他则丢失。

SubID Day  Time   X    
 1    1     1     NA
 1    1     2     NA
 1    1     3     7.4
 1    2     1     NA
 1    2     3     6.2
 2    1     1     NA
 2    1     2     NA
 2    1     3     7.1
 2    2     3     5.9
 2    2     2     NA
 2    2     1     NA

在动物园里,我能够深入到以下代码。我在R方面的经验非常有限。在此先感谢您!

data2 <- transform(data1, x = na.aggregate(x,by=SubID,FUN=sum,na.rm = T))

2 个答案:

答案 0 :(得分:1)

您可以按降序对数据进行排序,然后使用X[1]

library(dplyr)

df <- tibble(SubID=1, Day=1, Time=c(1,2,3), X=c(NA, NA, 2.2))

df <- df %>%
    group_by(SubID, Day) %>%
    arrange(desc(Time)) %>%
    mutate(
        X=case_when(
            is.na(X) ~ X[1],
            TRUE ~ X)
    )

答案 1 :(得分:1)

这是我评论的解释:

library(data.table)
library(zoo)
setDT(data1)
data1[order(-Time),
      Xf := na.locf(X),
      by = .(SubID, Day)]

好的,因此setDT函数使data1对象成为data.table。然后order(-Time)相对于data1以降序排列Time(由于-)。 Xf := na.locf(X)通过引用创建新列Xf(这意味着您不必将其分配回data1)作为na.locf(X),这是{{1 }}程序包,使用先前的值向前填充NA(在这种情况下,使用3中的值填充2和1)。最后一行指定我们要按zooSubID分组。

希望现在更加清楚,请随时询问您是否还有疑问。