替换 R 中时间序列数据中的缺失值
Replacing missing values in time series data in R
我是 R 的新手。我希望替换数据中 X 的缺失值。当 "Time" = 1 或 2 时,如何用 "X" 的值替换 "X" 的缺失值,当 "Time" = 3 时,相同的 "SubID" 和相同 "Day"
SubID:主题编号
天:每个受试者的天数 (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
我在 zoo 中达到了以下代码。我在 R 方面的经验非常有限。提前谢谢你!
data2 <- transform(data1,
x = na.aggregate(x,by=SubID,FUN=sum,na.rm = T))
您可以按时间降序排列数据,然后使用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)
)
我的评论解释如下:
library(data.table)
library(zoo)
setDT(data1)
data1[order(-Time),
Xf := na.locf(X),
by = .(SubID, Day)]
好的 setDT
函数使 data1
对象成为 data.table
。然后 order(-Time)
相对于 Time
降序排列 data1
(因为 -
)。 Xf := na.locf(X)
通过引用创建一个新列 Xf
(这意味着您不必将其分配回 data1
)作为 na.locf(X)
,这是 [=22] 中的一个函数=] 用以前的值填充 NA 的包(在这种情况下,用 3 中的值填充 2 和 1)。最后一行指定我们要按 SubID
和 Day
.
分组执行此操作
希望现在更清楚了,如果您还有其他疑问,请随时询问。
我是 R 的新手。我希望替换数据中 X 的缺失值。当 "Time" = 1 或 2 时,如何用 "X" 的值替换 "X" 的缺失值,当 "Time" = 3 时,相同的 "SubID" 和相同 "Day"
SubID:主题编号
天:每个受试者的天数 (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
我在 zoo 中达到了以下代码。我在 R 方面的经验非常有限。提前谢谢你!
data2 <- transform(data1,
x = na.aggregate(x,by=SubID,FUN=sum,na.rm = T))
您可以按时间降序排列数据,然后使用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)
)
我的评论解释如下:
library(data.table)
library(zoo)
setDT(data1)
data1[order(-Time),
Xf := na.locf(X),
by = .(SubID, Day)]
好的 setDT
函数使 data1
对象成为 data.table
。然后 order(-Time)
相对于 Time
降序排列 data1
(因为 -
)。 Xf := na.locf(X)
通过引用创建一个新列 Xf
(这意味着您不必将其分配回 data1
)作为 na.locf(X)
,这是 [=22] 中的一个函数=] 用以前的值填充 NA 的包(在这种情况下,用 3 中的值填充 2 和 1)。最后一行指定我们要按 SubID
和 Day
.
希望现在更清楚了,如果您还有其他疑问,请随时询问。