【问题标题】:Impute only certain NA's for a variable in a data frame [closed]仅为数据框中的变量估算某些 NA [关闭]
【发布时间】:2019-02-04 20:29:06
【问题描述】:

我是 R 新手,正在探索其中的不同美丽选项。我正在处理一个数据框,其中有一个包含 900 个缺失值的变量,即NAs。 我想为NAs 估算 3 个不同的值;

  • 第 300 个 NA,值为 1。
  • 第二个 300 NA 值 2。
  • 第 3 300 个数值为 3 的 NA。

数据共有23272行。

dim(data)
[1] 23272    2

colSums(is.na(data))
month    year
884      884

summary(data$month)
1    2    3    4    5    6    7    8    9    10    11    12    NA's
1977 1658 1837 1584 1703 1920 1789 2046 1955 2026  1845  2048  884

如果我们检查 8,10 和 12 月份。没有太大差异,因此考虑通过按比例 (300:300:284) 拆分将这 3 个月分配给 NA。通常我们会使用我的 MODE,但我想尝试这种方法。

【问题讨论】:

  • 您能分享一个最小的可重现示例并显示预期输出吗?

标签: r


【解决方案1】:

我假设你的意思是你有一个很长的列表,其中一些值是 NA:

set.seed(42)
df <- data.frame(val = sample(c(1:3, NA_real_), size = 1000, replace = TRUE))

我们可以保持 NA 的运行记录,并使用 %/% 的整数除法将它们分配给估算值。

library(tidyverse)
df2 <- df %>%
  mutate(NA_num = if_else(is.na(val),
                          cumsum(is.na(val)),
                          NA_integer_),
         imputed = NA_num %/% 100 + 1)

输出:

df2 %>%
  slice(397:410)  # based on manual examination using this seed

   val NA_num imputed
1   NA     98       1
2   NA     99       1
3    3     NA      NA
4    1     NA      NA
5    1     NA      NA
6    3     NA      NA
7    3     NA      NA
8    2     NA      NA
9   NA    100       2
10   1     NA      NA
11  NA    101       2
12   2     NA      NA
13   1     NA      NA
14   2     NA      NA

【讨论】:

    【解决方案2】:

    没有例子,我认为这会起作用。

    基本上,将 NA 过滤到新表中,进行计算并将其合并回来。假设 new_dt 是您过滤以仅包含 NA 的 OG 数据

    library('tidyverse');
    new_dt = data.frame(x1 =rep(1:900), x2= NA) %>%  filter(is.na(x2)) %>%
    mutate(23 = case_when(row_number()%/%300==0 ~1,
                          row_number()%/%300==1 ~2,
                          row_number()%/%300==2 ~3))
    dt <- rbind(dt,new_dt)
    
    

    【讨论】:

      猜你喜欢
      • 2015-03-20
      • 2020-03-24
      • 1970-01-01
      • 1970-01-01
      • 2019-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多