【发布时间】: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)] <- 0,但这会带来替换太多值的危险。
【问题讨论】: