非常类似于此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'))
答案 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"