R 通过操纵领先价值填充NAs
让我们假设我的数据看起来像下面摘录的前两列(它有更多的观察结果) 我要做的是使用dplyr将每个ID组的所有NA值填充为前导值减1(如在名为value_Filled的列中)R 通过操纵领先价值填充NAs,r,dplyr,R,Dplyr,让我们假设我的数据看起来像下面摘录的前两列(它有更多的观察结果) 我要做的是使用dplyr将每个ID组的所有NA值填充为前导值减1(如在名为value_Filled的列中) 如何操作?您可以使用ifelse语句对新列进行变异,以检查NA值: library(dplyr) df <- structure(list(ID = c(762L, 762L, 763L, 763L, 763L), Value = c(2L, 2L, NA, 8L, 9L)), class = "data.fram
如何操作?您可以使用
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))
库(dplyr)
df我们可以使用mutate_at
,包括列以检入vars
参数,并将每列中的NA
替换为lead
值减1
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
当然,我的数据帧比这里显示的摘录有更多的观察值,而且我要填充的值也不是所有的值都对应于ID的第一个字符。所以我想我需要一个更具普遍性的解决方案。那么请提供一个可复制的例子。如果有更多条件,您必须检查更多条件。这个解决方案在理论上是可以推广的。但要做到这一点,您需要提供一个描述整个问题的数据集。我的回答回答了你的问题。
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