当前位置: 首页>>编程示例 >>用法及示例精选 >>正文


R dtplyr fill.dtplyr_step 用上一个或下一个值填充缺失值

这是 tidyr fill() 泛型的方法。它被翻译为 data.table::nafill() 。请注意,data.table::nafill() 目前仅适用于整数和双列。

用法

# S3 method for dtplyr_step
fill(data, ..., .direction = c("down", "up", "downup", "updown"))

参数

data

一个 DataFrame 。

...

< tidy-select > 要填充的列。

.direction

填充缺失值的方向。目前是"down"(默认)、"up"、"downup"(即先向下然后向上)或"updown"(先向上然后向下)。

例子

library(tidyr)

# Value (year) is recorded only when it changes
sales <- lazy_dt(tibble::tribble(
  ~quarter, ~year, ~sales,
  "Q1",    2000,    66013,
  "Q2",      NA,    69182,
  "Q3",      NA,    53175,
  "Q4",      NA,    21001,
  "Q1",    2001,    46036,
  "Q2",      NA,    58842,
  "Q3",      NA,    44568,
  "Q4",      NA,    50197,
  "Q1",    2002,    39113,
  "Q2",      NA,    41668,
  "Q3",      NA,    30144,
  "Q4",      NA,    52897,
  "Q1",    2004,    32129,
  "Q2",      NA,    67686,
  "Q3",      NA,    31768,
  "Q4",      NA,    49094
))

# `fill()` defaults to replacing missing data from top to bottom
sales %>% fill(year)
#> Source: local data table [16 x 3]
#> Call:   copy(`_DT10`)[, `:=`(year = nafill(year, "locf"))]
#> 
#>   quarter  year sales
#>   <chr>   <dbl> <dbl>
#> 1 Q1       2000 66013
#> 2 Q2       2000 69182
#> 3 Q3       2000 53175
#> 4 Q4       2000 21001
#> 5 Q1       2001 46036
#> 6 Q2       2001 58842
#> # … with 10 more rows
#> 
#> # Use as.data.table()/as.data.frame()/as_tibble() to access results

# Value (n_squirrels) is missing above and below within a group
squirrels <- lazy_dt(tibble::tribble(
  ~group,    ~name,     ~role,     ~n_squirrels,
  1,      "Sam",    "Observer",   NA,
  1,     "Mara", "Scorekeeper",    8,
  1,    "Jesse",    "Observer",   NA,
  1,      "Tom",    "Observer",   NA,
  2,     "Mike",    "Observer",   NA,
  2,  "Rachael",    "Observer",   NA,
  2,  "Sydekea", "Scorekeeper",   14,
  2, "Gabriela",    "Observer",   NA,
  3,  "Derrick",    "Observer",   NA,
  3,     "Kara", "Scorekeeper",    9,
  3,    "Emily",    "Observer",   NA,
  3, "Danielle",    "Observer",   NA
))

# The values are inconsistently missing by position within the group
# Use .direction = "downup" to fill missing values in both directions
squirrels %>%
  dplyr::group_by(group) %>%
  fill(n_squirrels, .direction = "downup") %>%
  dplyr::ungroup()
#> Source: local data table [12 x 4]
#> Call:   copy(`_DT12`)[, `:=`(n_squirrels = nafill(nafill(n_squirrels, 
#>     "locf"), "nocb")), by = .(group)]
#> 
#>   group name    role        n_squirrels
#>   <dbl> <chr>   <chr>             <dbl>
#> 1     1 Sam     Observer              8
#> 2     1 Mara    Scorekeeper           8
#> 3     1 Jesse   Observer              8
#> 4     1 Tom     Observer              8
#> 5     2 Mike    Observer             14
#> 6     2 Rachael Observer             14
#> # … with 6 more rows
#> 
#> # Use as.data.table()/as.data.frame()/as_tibble() to access results

# Using `.direction = "updown"` accomplishes the same goal in this example
源代码:R/fill.R

相关用法


注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Fill in missing values with previous or next value。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。