按R中的ID向前推进最后一次观察

按R中的ID向前推进最后一次观察,r,zoo,na,R,Zoo,Na,我每天都会观察到很多缺失值,我试图通过每个个体的向量传播第一个非缺失值 在到目前为止所做的搜索中,我在zoo包中发现了na.locf函数;但是,我现在需要根据数据帧中的id变量来调节此函数。ddply是否是正确的功能?如果是这样的话,有人能帮我弄清楚如何将输出包含在同一数据帧中名为result的新变量中吗 这就是我到目前为止所做的: # Load required libraries library(zoo) library(plyr) # Create the data data <-

我每天都会观察到很多缺失值,我试图通过每个个体的向量传播第一个非缺失值

在到目前为止所做的搜索中,我在
zoo
包中发现了
na.locf
函数;但是,我现在需要根据数据帧中的
id
变量来调节此函数。
ddply
是否是正确的功能?如果是这样的话,有人能帮我弄清楚如何将输出包含在同一数据帧中名为
result
的新变量中吗

这就是我到目前为止所做的:

# Load required libraries
library(zoo)
library(plyr)

# Create the data
data <- structure(list(id = c(1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 
              2, 2, 2), day = c(0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3, 4, 5, 6, 7, 
              8), value = c("NA", "1", "NA", "NA", "NA", "NA", "NA", "NA", 
              "NA", "NA", "1", "NA", "NA", "NA", "NA", "NA")), .Names = c("id", 
              "day", "value"), row.names = c(NA, -16L), class = "data.frame")

# Propagate the value of the first non-missing observation in data$value forward for each id
data$result <- na.locf(data$value, na.rm = FALSE)
#加载所需的库
图书馆(动物园)
图书馆(plyr)
#创建数据
数据1)首先请注意,
列是一个字符列,具有
“NA”
值,而不是
NA
值,因此让我们先修复##中的第一个。然后创建一个包装函数
na.locf.na
,该函数在中使用
na.locf
,除了默认值为
na.rm=FALSE
之外,其他函数都是相同的。最后使用
ave
通过
id
应用
na.locf

library(zoo)

data2 <- transform(data, value = as.numeric(value)) ##

na.locf.na <- function(x, na.rm = FALSE, ...) na.locf(x, na.rm = na.rm, ...)
transform(data2, value = ave(value, id, FUN = na.locf.na))
在这两种情况下,结果都是:

   id day value
1   1   0    NA
2   1   1     1
3   1   2     1
4   1   3     1
5   1   4     1
6   1   5     1
7   1   6     1
8   2   0    NA
9   2   1    NA
10  2   2    NA
11  2   3     1
12  2   4     1
13  2   5     1
14  2   6     1
15  2   7     1
16  2   8     1
3)我们可以交替使用dplyr和zoo,使用上面的
na.locf.na

library(zoo)
library(dplyr)

data2 <- data %>% mutate(value = as.numeric(value)) # fix value column
data2 %>% group_by(id) %>% mutate(value = na.locf.na(value))
修订版重新组织了演示文稿并添加了备选方案。

绝对完美——谢谢!我以前从未使用过
transform
函数,但我肯定会进一步研究它。再次感谢。
library(zoo)
library(dplyr)

data2 <- data %>% mutate(value = as.numeric(value)) # fix value column
data2 %>% group_by(id) %>% mutate(value = na.locf.na(value))
library(devtools)
install_github("hadley/dplyr")