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

问题描述 投票:0回答:2

我是R.的新手。我希望在数据中替换X的缺失值。当“时间”= 1或2时,如果“时间”= 3,对于相同的“子ID”和相同的“日”,如何将“X”的缺失值替换为“X”的缺失值

子ID:主题编号

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

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

X:当Time为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))

r time-series na zoo
2个回答
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),它是zoo包中的函数,用前一个值填充NAs(在这种情况下填充2和1)具有3)中的值。最后一行指定我们要按SubIDDay分组。

希望现在更清楚,随时问你是否还有疑问。


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)
    )
© www.soinside.com 2019 - 2024. All rights reserved.