我是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))
答案 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)。最后一行指定我们要按zoo
和SubID
分组。
希望现在更加清楚,请随时询问您是否还有疑问。