【问题标题】:R / tidyr::complete - filling missing values dynamicallyR / tidyr::complete - 动态填充缺失值
【发布时间】:2023-04-01 20:47:01
【问题描述】:

我正在使用tidyr::complete() 在具有许多列的数据框中包含缺失的行,从而导致 NAs 值。如果我没有明确的列名列表,如何指示 fill 选项将 NA 值替换为 0?

例子:

df <- data.frame(year = c(2010, 2013:2015),
                 age.21 = runif(4, 0, 10),
                 age.22 = runif(4, 0, 10),
                 age.23 = runif(4, 0, 10),
                 age.24 = runif(4, 0, 10),
                 age.25 = runif(4, 0, 10))

# replaces missing values with NA - not what I want
df.complete <- complete(df, year = 2010:2015)

# replaces missing values with 0 - works, but needs explicit list
df.complete <- complete(df, year = 2010:2015, fill = list(age.21 = 0, age.22 = 0,
                                                          age.23 = 0, age.24 = 0,
                                                          age.25 = 0))


# throws error (is.list(replace) is not TRUE)
df.complete <- complete(df, year = 2010:2015, fill = 0)

# replaces missing values with NA - not what I want
df.complete <- complete(df, year = 2010:2015, fill = list(rep(0,6)))

一种解决方法是使用df.complete[is.na(df.complete)] &lt;- 0,但这会带来替换太多值的危险。

【问题讨论】:

    标签: r tidyr


    【解决方案1】:

    这是一种首先重塑数据的方法:

    df %>% 
      gather("var", "val", -year) %>% 
      complete(year = 2010:2015, var, fill = list(val = 0)) %>%
      spread(var, val)
    
    Source: local data frame [6 x 6]
    
       year   age.21   age.22    age.23   age.24    age.25
      (dbl)    (dbl)    (dbl)     (dbl)    (dbl)     (dbl)
    1  2010 8.940997 7.787210 1.5747435 9.874449 5.2228670
    2  2011 0.000000 0.000000 0.0000000 0.000000 0.0000000
    3  2012 0.000000 0.000000 0.0000000 0.000000 0.0000000
    4  2013 2.965928 6.495460 0.8966319 2.849262 0.2430174
    5  2014 4.608676 1.946671 1.5765912 8.551907 0.3146824
    6  2015 7.359407 4.414294 4.3419163 4.082509 1.5770299
    

    【讨论】:

      猜你喜欢
      • 2021-09-21
      • 1970-01-01
      • 2020-05-21
      • 1970-01-01
      • 2012-10-25
      • 2016-10-26
      • 1970-01-01
      相关资源
      最近更新 更多