根据其他列的最后一个非缺失值创建列

时间:2019-02-11 09:22:27

标签: r dplyr

非常类似于此questions,我尝试通过分组查找数据帧中现有变量的最后一个非缺失值来填充新变量,最好使用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 :(得分:3)

使用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

答案 1 :(得分:1)

这是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"