создать столбец на основе последнего не пропущенного значения другого столбца - PullRequest
0 голосов
/ 11 февраля 2019

очень похоже на это вопросы Я пытаюсь заполнить новую переменную, найдя последнее не пропущенное значение по группе для существующей переменной в кадре данных, в идеале используя dplyr / zoo.Я хочу сохранить только последнее значение, а не просто перезаписать пропуски, рассмотрим следующий минимальный пример:

df1 <- data.frame(ID   = c(1, 1, 1, 2, 2,2),
                  date = c(1,2,3,1,2,3),
                  var1 = c('a', '', 'b', '','c', ''))

df2 = ## R-commands to get:
df2 <- data.frame(ID   = c(1, 1, 1, 2, 2,2),
                  date = c(1,2,3,1,2,3),
                  var1 = c('b', 'b', 'b', 'c','c', 'c'))

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Вот один вариант с base R с использованием ave

df1$var1 <- with(df1, ave(as.character(var1), ID, FUN = 
      function(x) tail(x[nzchar(x)], 1)))
df1$var1
#[1] "b" "b" "b" "c" "c" "c"
0 голосов
/ 11 февраля 2019

Используя dplyr,

library(dplyr)

df1 %>% 
 group_by(ID) %>% 
 mutate(var1 = last(var1[var1 != '']))

, что дает,

# A tibble: 6 x 3
# Groups:   ID [2]
     ID  date var1 
  <dbl> <dbl> <fct>
1     1     1 b    
2     1     2 b    
3     1     3 b    
4     2     1 c    
5     2     2 c    
6     2     3 c
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...