【问题标题】:Identify groups with all missing values for a variable and extrapolate within groups in R识别具有变量所有缺失值的组并在 R 中的组内推断
【发布时间】:2020-11-25 23:43:13
【问题描述】:

我想确定给定变量只有缺失值的组。我的数据如下所示:

id <- seq(1:4)
year <- c(2005, 2006, 2007, 2008)
y <- c(6, 11, NA, NA, NA, NA, NA, NA, 9, NA, NA, 7, 8, 7, NA, 12)
test <- data.frame(id, year, y)
arrange(test, desc(id))
print(test)

我尝试按 id 对数据进行分组,并创建了 allNA 变量,该变量应该将只有缺失值的组分开(我还需要在最终结果中保留那些未触及的行)。然后我在具有一些非缺失值的组中进行推断:

test %>% 
  group_by(id) %>% 
  mutate(allNA = !all(is.na(y))) %>%
  filter(allNA) %>%
  select(-allNA) %>%
  mutate(y2=na.spline(y))

我不断得到不一致的推断结果。有时,在创建 allNA 变量后,我可以看到一些 FALSE 值,它使 2007 年的值丢失或删除它们,但有时当我执行代码时它都是 TRUE 并且它推断出所有内容。我想知道 allNA 变量是否正在做它应该做的工作。因此,我决定首先确定只有 NA 的组 _ 这里 2007 年 _ 但我不知道如何做到这一点并解决外推问题。

【问题讨论】:

    标签: r filtering grouping extrapolation


    【解决方案1】:

    创建列allNA后,使用if/else应用na.spline

    library(dplyr)
    library(zoo)
    test %>% 
        group_by(id) %>%
        mutate(allNA = all(is.na(y)),
                y2 = if(!allNA[1]) na.spline(y) else y)
    

    【讨论】:

    • 您的代码正在推断所有值 _ 包括 2007 年的值 _ 并且不会留下那一年的 NA。它似乎没有考虑分组,也没有在组内推断。
    • @Marj mutategroup_by 之后
    • 没错,但我不知道为什么它不起作用。
    • @Marj 你可以试试dplyr::mutate(allNA = .. 以防你加载了plyr 然后plyr::mutate 掩盖了dplyr::mutate
    • 在 zoo 的开发版本中,您不必检查 NA。这有效:install.packages("zoo", repos="http://R-Forge.R-project.org"); test %&gt;% group_by(id) %&gt;% mutate(y2 = na.spline(y, na.rm = FALSE))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-25
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    相关资源
    最近更新 更多