gpt4 book ai didi

r - 使用组内完整的 dplyr 填充 data.frame 中的缺失值

转载 作者:行者123 更新时间:2023-12-04 11:24:54 31 4
gpt4 key购买 nike

我正在尝试填充数据框中的缺失值,但我不想要所有可能的变量组合 - 我只想根据三个变量的分组进行填充:coursecode , year , 和 week .
我查看了 complete()在 tidyr 库中,但即使查看了 Using tidyr::complete with group_by,我也无法让它工作和 https://blog.rstudio.org/2015/09/13/tidyr-0-3-0/
我有观察员在不同类(class)中收集一年中特定星期的数据。例如,可能会在我较大的数据集中收集第 1-10 周的数据,但我只关心在特定类(class)-年组合中发生的缺失周。
例如。,

  • 类(class)中 一个 2000 , 数据收集于 第 1、3 和 4 周 .
  • 我想知道第 2 周 不见了。
  • 我不在乎缺少第 5 周,即使 B 类(class)的其他人在 2000 年收集了第 5 周的数据。

  • 例子:
    library(dplyr)
    library(tidyr)

    df <- data.frame(coursecode = rep(c("A", "B"), each = 6),
    year = rep(c(2000, 2000, 2000, 2001, 2001, 2001), 2),
    week = c(1, 3, 4, 1, 2, 3, 2, 3, 5, 3, 4, 5),
    values = c(1:12),
    othervalues = c(12:23),
    region = "Big")

    df

    coursecode year week values othervalues region
    1 A 2000 1 1 12 Big
    2 A 2000 3 2 13 Big
    3 A 2000 4 3 14 Big
    4 A 2001 1 4 15 Big
    5 A 2001 2 5 16 Big
    6 A 2001 3 6 17 Big
    7 B 2000 2 7 18 Big
    8 B 2000 3 8 19 Big
    9 B 2000 5 9 20 Big
    10 B 2001 3 10 21 Big
    11 B 2001 4 11 22 Big
    12 B 2001 5 12 23 Big
    尝试完成:(不是我想要的输出)
        df %>% 
    complete(coursecode, year, region, nesting(week))

    # A tibble: 20 x 6
    coursecode year region week values othervalues
    <fctr> <dbl> <fctr> <dbl> <int> <int>
    1 A 2000 Big 1 1 12
    2 A 2000 Big 2 NA NA
    3 A 2000 Big 3 2 13
    4 A 2000 Big 4 3 14
    5 A 2000 Big 5 NA NA
    6 A 2001 Big 1 4 15
    7 A 2001 Big 2 5 16
    8 A 2001 Big 3 6 17
    9 A 2001 Big 4 NA NA
    10 A 2001 Big 5 NA NA
    11 B 2000 Big 1 NA NA
    12 B 2000 Big 2 7 18
    13 B 2000 Big 3 8 19
    14 B 2000 Big 4 NA NA
    15 B 2000 Big 5 9 20
    16 B 2001 Big 1 NA NA
    17 B 2001 Big 2 NA NA
    18 B 2001 Big 3 10 21
    19 B 2001 Big 4 11 22
    20 B 2001 Big 5 12 23
    所需输出
       coursecode  year region  week values othervalues
    <fctr> <dbl> <fctr> <dbl> <int> <int>
    1 A 2000 Big 1 1 12
    2 A 2000 Big 2 NA NA
    3 A 2000 Big 3 2 13
    4 A 2000 Big 4 3 14
    5 A 2001 Big 1 4 15
    6 A 2001 Big 2 5 16
    7 A 2001 Big 3 6 17
    8 B 2000 Big 2 7 18
    9 B 2000 Big 3 8 19
    10 B 2000 Big 4 NA NA
    11 B 2000 Big 5 9 20
    12 B 2001 Big 3 10 21
    13 B 2001 Big 4 11 22
    14 B 2001 Big 5 12 23

    最佳答案

    我们可以试试 expandleft_join

    library(dplyr)
    library(tidyr)
    df %>%
    group_by(coursecode, year, region) %>%
    expand(week = full_seq(week, 1)) %>%
    left_join(., df)
    # coursecode year region week values othervalues
    # <fctr> <dbl> <fctr> <dbl> <int> <int>
    #1 A 2000 Big 1 1 12
    #2 A 2000 Big 2 NA NA
    #3 A 2000 Big 3 2 13
    #4 A 2000 Big 4 3 14
    #5 A 2001 Big 1 4 15
    #6 A 2001 Big 2 5 16
    #7 A 2001 Big 3 6 17
    #8 B 2000 Big 2 7 18
    #9 B 2000 Big 3 8 19
    #10 B 2000 Big 4 NA NA
    #11 B 2000 Big 5 9 20
    #12 B 2001 Big 3 10 21
    #13 B 2001 Big 4 11 22
    #14 B 2001 Big 5 12 23

    关于r - 使用组内完整的 dplyr 填充 data.frame 中的缺失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42866119/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com