將隱式缺失值轉換為顯式缺失值。這是 expand()
、 dplyr::full_join()
和 replace_na()
的包裝,對於完成缺失的數據組合非常有用。
參數
- data
-
一個 DataFrame 。
- ...
-
<
data-masking
> 要擴展或完成的列規範。列可以是原子向量或列表。-
要查找
x
、y
和z
的所有唯一組合(包括數據中不存在的組合),請將每個變量作為單獨的參數提供:expand(df, x, y, z)
或complete(df, x, y, z)
。 -
要僅查找數據中出現的組合,請使用
nesting
:expand(df, nesting(x, y, z))
。 -
您可以將這兩種形式結合起來。例如,
expand(df, nesting(school_id, student_id), date)
將為所有可能日期的每個當前 school-student 組合生成一行。
與因子一起使用時,
expand()
和complete()
使用完整的級別集,而不僅僅是數據中出現的級別。如果您隻想使用數據中看到的值,請使用forcats::fct_drop()
。與連續變量一起使用時,您可能需要填充數據中未出現的值:為此,請使用
year = 2010:2020
或year = full_seq(year,1)
等表達式。 -
- fill
-
一個命名列表,為每個變量提供一個值,以代替
NA
來缺少組合。 - explicit
-
隱式(新創建的)和顯式(預先存在的)缺失值是否都應該由
fill
填充?默認情況下,這是TRUE
,但如果設置為FALSE
,這會將填充限製為僅隱式缺失值。
分組 DataFrame
通過 dplyr::group_by()
創建的分組數據幀,complete()
在每個組內運行。因此,您無法完成分組列。
例子
df <- tibble(
group = c(1:2, 1, 2),
item_id = c(1:2, 2, 3),
item_name = c("a", "a", "b", "b"),
value1 = c(1, NA, 3, 4),
value2 = 4:7
)
df
#> # A tibble: 4 × 5
#> group item_id item_name value1 value2
#> <dbl> <dbl> <chr> <dbl> <int>
#> 1 1 1 a 1 4
#> 2 2 2 a NA 5
#> 3 1 2 b 3 6
#> 4 2 3 b 4 7
# Combinations --------------------------------------------------------------
# Generate all possible combinations of `group`, `item_id`, and `item_name`
# (whether or not they appear in the data)
df %>% complete(group, item_id, item_name)
#> # A tibble: 12 × 5
#> group item_id item_name value1 value2
#> <dbl> <dbl> <chr> <dbl> <int>
#> 1 1 1 a 1 4
#> 2 1 1 b NA NA
#> 3 1 2 a NA NA
#> 4 1 2 b 3 6
#> 5 1 3 a NA NA
#> 6 1 3 b NA NA
#> 7 2 1 a NA NA
#> 8 2 1 b NA NA
#> 9 2 2 a NA 5
#> 10 2 2 b NA NA
#> 11 2 3 a NA NA
#> 12 2 3 b 4 7
# Cross all possible `group` values with the unique pairs of
# `(item_id, item_name)` that already exist in the data
df %>% complete(group, nesting(item_id, item_name))
#> # A tibble: 8 × 5
#> group item_id item_name value1 value2
#> <dbl> <dbl> <chr> <dbl> <int>
#> 1 1 1 a 1 4
#> 2 1 2 a NA NA
#> 3 1 2 b 3 6
#> 4 1 3 b NA NA
#> 5 2 1 a NA NA
#> 6 2 2 a NA 5
#> 7 2 2 b NA NA
#> 8 2 3 b 4 7
# Within each `group`, generate all possible combinations of
# `item_id` and `item_name` that occur in that group
df %>%
dplyr::group_by(group) %>%
complete(item_id, item_name)
#> # A tibble: 8 × 5
#> # Groups: group [2]
#> group item_id item_name value1 value2
#> <dbl> <dbl> <chr> <dbl> <int>
#> 1 1 1 a 1 4
#> 2 1 1 b NA NA
#> 3 1 2 a NA NA
#> 4 1 2 b 3 6
#> 5 2 2 a NA 5
#> 6 2 2 b NA NA
#> 7 2 3 a NA NA
#> 8 2 3 b 4 7
# Supplying values for new rows ---------------------------------------------
# Use `fill` to replace NAs with some value. By default, affects both new
# (implicit) and pre-existing (explicit) missing values.
df %>%
complete(
group,
nesting(item_id, item_name),
fill = list(value1 = 0, value2 = 99)
)
#> # A tibble: 8 × 5
#> group item_id item_name value1 value2
#> <dbl> <dbl> <chr> <dbl> <int>
#> 1 1 1 a 1 4
#> 2 1 2 a 0 99
#> 3 1 2 b 3 6
#> 4 1 3 b 0 99
#> 5 2 1 a 0 99
#> 6 2 2 a 0 5
#> 7 2 2 b 0 99
#> 8 2 3 b 4 7
# Limit the fill to only the newly created (i.e. previously implicit)
# missing values with `explicit = FALSE`
df %>%
complete(
group,
nesting(item_id, item_name),
fill = list(value1 = 0, value2 = 99),
explicit = FALSE
)
#> # A tibble: 8 × 5
#> group item_id item_name value1 value2
#> <dbl> <dbl> <chr> <dbl> <int>
#> 1 1 1 a 1 4
#> 2 1 2 a 0 99
#> 3 1 2 b 3 6
#> 4 1 3 b 0 99
#> 5 2 1 a 0 99
#> 6 2 2 a NA 5
#> 7 2 2 b 0 99
#> 8 2 3 b 4 7
相關用法
- R tidyr chop 砍伐和砍伐
- R tidyr cms_patient_experience 來自醫療保險和醫療補助服務中心的數據
- R tidyr separate_rows 將折疊的列分成多行
- R tidyr extract 使用正則表達式組將字符列提取為多列
- R tidyr pivot_longer_spec 使用規範將數據從寬轉為長
- R tidyr unnest_longer 將列表列取消嵌套到行中
- R tidyr uncount “計數” DataFrame
- R tidyr pivot_wider_spec 使用規範將數據從長軸轉向寬軸
- R tidyr replace_na 將 NA 替換為指定值
- R tidyr unnest_wider 將列表列取消嵌套到列中
- R tidyr full_seq 在向量中創建完整的值序列
- R tidyr nest 將行嵌套到 DataFrame 的列表列中
- R tidyr separate 使用正則表達式或數字位置將字符列分成多列
- R tidyr pivot_wider 將數據從長軸轉向寬軸
- R tidyr nest_legacy Nest() 和 unnest() 的舊版本
- R tidyr separate_longer_delim 將字符串拆分為行
- R tidyr gather 將列收集到鍵值對中
- R tidyr hoist 將值提升到列表列之外
- R tidyr pivot_longer 將數據從寬轉為長
- R tidyr pack 打包和拆包
- R tidyr separate_wider_delim 將字符串拆分為列
- R tidyr drop_na 刪除包含缺失值的行
- R tidyr fill 用上一個或下一個值填充缺失值
- R tidyr tidyr_legacy 舊名稱修複
- R tidyr expand 擴展 DataFrame 以包含所有可能的值組合
注:本文由純淨天空篩選整理自Hadley Wickham等大神的英文原創作品 Complete a data frame with missing combinations of data。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。