在tidyverse中用上一级填充其他所有行

ajb*_*ley 4 r dplyr tidyr

我正在学习R,并且与tidry和dplyr碰到了障碍。

我在R中有一个数据框,其中第一列是一个因子,每隔一行只有一个级别。我正在尝试弄清楚如何使用tidyverse工具进行填充。

我试过使用填充和替换,但似乎都不起作用。

td <- data.frame("State" = c("NY", "", "OH", ""), "Your" = c(101:104), "Name" = c(5:8))

td
State    Your    Name
<fctr>   <int>   <int>
NY       101     5      
         102     6      
OH       103     7      
         104     8  
Run Code Online (Sandbox Code Playgroud)

我想要得到的是

State    Your    Name
<fctr>   <int>   <int>
NY       101     5      
NY       102     6      
OH       103     7      
OH       104     8  
Run Code Online (Sandbox Code Playgroud)

使用tidyr或dplyr

akr*_*run 5

一种选择是,以取代空白("")与NAna_if)和使用filltidyr之前它来填充与非NA相邻元件的NA元素

library(tidyverse)
td %>% 
   mutate(State = na_if(State, "")) %>%
   fill(State)
#    State Your Name
#1    NY  101    5
#2    NY  102    6
#3    OH  103    7
#4    OH  104    8
Run Code Online (Sandbox Code Playgroud)

或使用 base R

i1 <- td$State != ""
td$State <- with(td, State[i1][cumsum(i1)])
Run Code Online (Sandbox Code Playgroud)