gpt4 book ai didi

r - 在 R 中通过 ID 进行最后的观察

转载 作者:行者123 更新时间:2023-12-04 23:50:24 24 4
gpt4 key购买 nike

我每天都有很多缺失值的观察,并试图通过每个人的向量传播第一个非缺失值。

在我到目前为止所做的搜索中,我发现了 na.locf zoo 中的函数包裹;但是,我现在需要根据 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)

关于如何运行 na.locf 的任何想法每个功能 id将不胜感激。谢谢!

最佳答案

1) 首先注意value column 是带有 "NA" 的字符列值,而不是 NA值,所以让我们先在## 中解决这个问题。然后创建一个包装函数 na.locf.na使用 na.locfzoo package除了默认为 na.rm = FALSE .最后使用 ave申请 na.locf来自 id :

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

2) 或使用 fn 的这种紧凑型替代方案来自 gsubfn package代表 na.locf.na以更紧凑的方式内联:
library(zoo)
library(gsubfn)

transform(data2, value = fn$ave(value, id, FUN = ~ na.locf(x, na.rm = FALSE)))

在这两种情况中的任何一种情况下,结果都是:
   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) 我们可以使用 na.locf.na 交替使用 dplyr 和 zoo从上面:
library(zoo)
library(dplyr)

data2 <- data %>% mutate(value = as.numeric(value)) # fix value column
data2 %>% group_by(id) %>% mutate(value = na.locf.na(value))

如果 dplyr from CRAN在这里不起作用,请尝试 github 中的一个:
library(devtools)
install_github("hadley/dplyr")

修订 重新组织了演示文稿并添加了替代方案。

关于r - 在 R 中通过 ID 进行最后的观察,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23818493/

24 4 0
文章推荐: angularjs -