我有一个类似的数据框;
dataframe <- data.frame(ID1=c(NA,2,3,1,NA,2),ID2=c(1,2,3,1,2,2))
现在,我想将NA值转换为与下一栏有价值的值相同的有价值的值;
dataframe <- data.frame(ID1=c(1,2,3,1,2,2),ID2=c(1,2,3,1,2,2))
我想我应该使用if
函数,但是我想使用%>%
进行简化。请教我。
ifelse
解决方案
dataframe <- within(dataframe, ID1 <- ifelse(is.na(ID1),ID2,ID1))
诸如此类
> dataframe
ID1 ID2
1 1 1
2 2 2
3 3 3
4 1 1
5 2 2
6 2 2
一个dplyr
(使用%>%
)解决方案:
sanitized <- dataframe %>%
mutate(ID1 = ifelse(is.na(ID1), ID2, ID1))
一种简单的解决方案是找出NA
值,并将其替换为相应的列值。
inds <- is.na(dataframe$ID1)
dataframe$ID1[inds] <- dataframe$ID2[inds]
但是,由于需要管道解决方案,因此可以使用dplyr的合并
library(dplyr)
dataframe %>% mutate(ID1 = coalesce(ID1, ID2))