Заполните каждый второй ряд с уровнем выше в Tidyverse - PullRequest
0 голосов
/ 28 сентября 2018

Я изучаю 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  

Что я хочу получить

State    Your    Name
<fctr>   <int>   <int>
NY       101     5      
NY       102     6      
OH       103     7      
OH       104     8  

с использованием тидира или дплира

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Раствор от zoo

library(zoo)
td[td=='']=NA
zoo::na.locf(td)
  State Your Name
1    NY  101    5
2    NY  102    6
3    OH  103    7
4    OH  104    8
0 голосов
/ 28 сентября 2018

Один из вариантов - заменить пробелы ("") на NA (na_if) и использовать fill из tidyr, чтобы заполнить элементы 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

Или используя base R

i1 <- td$State != ""
td$State <- with(td, State[i1][cumsum(i1)])
...