按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")