如何在插补数据时忽略具有所有 NA 的组

问题描述 投票:0回答:1

我有一个包含 1000 行的大型面板数据。我想使用 group by (gvkey) 并为 NA 估算值,但有些组具有所有 NA。我想忽略那些群体。

这些代码行给了我我想要的东西

set.seed(123)  
fake_data <- data.frame(
  gvkey = rep(c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J"), each = num_years),
  year = rep(2010:2014, 10),
  dltt = rnorm(50))

for (gvkey in c("A", "B", "D", "E", "F", "G", "H", "I", "J")) {
  year_to_replace <- sample(c(2011, 2012, 2013), size = sample(2:3, 1), replace = FALSE)
  fake_data$dltt[fake_data$gvkey == gvkey & fake_data$year %in% year_to_replace] <- NA
}

fake_data <- fake_data %>%
  arrange(gvkey, year) %>%
  group_by(gvkey) %>%
  mutate(dltt_imputed = na.approx(dltt))

但是如果某些组有所有 NAs,我会得到一个错误

fake_data$dltt[fake_data$gvkey == "C"] <- NA

fake_data <- fake_data %>%
  arrange(gvkey, year) %>%
  group_by(gvkey) %>%
  mutate(dltt_imputed = na.approx(dltt))

请有人帮我在正在进行的管道中添加一些条件以忽略这些组

r dplyr na zoo imputets
1个回答
0
投票

一个选项是为

mutate()
提供一个条件来忽略具有完整缺失值的组
(here, group C)
,并使用相关组的相应非缺失值来近似缺失值。由于您的问题中未提供
num-years
,因此我根据值的总数
num_years=5
将其假设为
(50)

library(zoo)
library(tidyverse)

num_years <- 5
fake_data$dltt[fake_data$gvkey == "C"] <- NA

fake_data <- fake_data %>%
  arrange(gvkey, year) %>%
  group_by(gvkey) %>%
  mutate(dltt_imputed = ifelse(sum(is.na(dltt)) == num_years | !(is.na(dltt)), dltt,  na.approx(dltt)))

请注意,新的估算列将包含

group C
并且不排除具有完整缺失值的此类组。所以我会把这个留给 QO 如何在新的估算列中处理完整的缺失组。

© www.soinside.com 2019 - 2024. All rights reserved.