代码之家  ›  专栏  ›  技术社区  ›  Joe

tidyr::fill()包含连续整数而不是重复值

  •  2
  • Joe  · 技术社区  · 7 年前

    id 我希望更换中的NAs dist_from_top 与顶部的距离 变成c(5,4,3,2,1,5,4,3,2)。我在用那个 与顶部的距离 在每个 作为种子进行分组以填充 与顶部的距离

    tidyr::fill() 可以在整个分组中填充相同的值,但我想不出一种方法使它在填充时增减1。非常感谢您的帮助。

    library(dplyr)
    library(tidyr)
    
    df <- 
      tribble(
        ~id, ~mgr, ~dist_from_top,
        "A", "B",  NA,
        "A", "C",  NA,
        "A", "D",  3,
        "A", "E",  NA,
        "A", "F",  NA,
        "B", "C",  NA,
        "B", "D",  4,
        "B", "E",  NA,
        "B", "F",  NA
      )
    

    使用 fill()

    df %>% 
      group_by(id) %>% 
      fill(dist_from_top, .direction = "up") %>%
      fill(dist_from_top, .direction = "down")
    
    1 回复  |  直到 7 年前
        1
  •  3
  •   krlmlr    7 年前
    1. 从任意起点开始,在每组中创建向下计数的列:

      ... %>% mutate(rn = -row_number())
      
    2. dist_from_top rn 在哪一排 不是 NA

      ... %>% mutate(dist_from_top = rn + max(dist_from_top - rn, na.rm = TRUE))
      

      max() 不适用 .

    两者 mutate()

    df %>%
      group_by(id) %>%
      mutate(rn = ...) %>%
      mutate(dist_from_top = ...) %>%
      ungroup() %>%
      select(-rn)
    

    不适用 小组,你们会看到一个警告。