让我们假设我的数据看起来像以下摘录的前两列(有更多观察结果)。
ID Value Value_Filled
762 2 2
762 2 2
763 NA 7
763 8 8
763 9 9
我想做的是使用dplyr填充每个ID组的所有NA值,其前导值减去1(例如在名为Value_Filled的列中)。
我该怎么做?
答案 0 :(得分:2)
我们可以使用mutate_at
,包括列以签入vars
参数,并用值NA
减去1替换每一列中的lead
。
library(dplyr)
df %>%
group_by(ID) %>% #Maybe you need this, doesn't change anything for this example
mutate_at(vars(Value, Value_Filled), ~ ifelse(is.na(.), lead(.) - 1, .))
# ID Value Value_Filled
#1 762 2 2
#2 762 2 2
#3 763 7 7
#4 763 8 8
#5 763 9 9
答案 1 :(得分:0)
您可以mutate
带有ifelse
声明的新列来检查NA
值:
library(dplyr)
df <- structure(list(ID = c(762L, 762L, 763L, 763L, 763L), Value = c(2L,
2L, NA, 8L, 9L)), class = "data.frame", row.names = c(NA, -5L
))
df_filled <- df %>% mutate(value_filled = ifelse(is.na(.$Value),as.integer(substr(as.character(.$ID),1,1)),.$Value))