用另一个变量的值替换NA

时间:2018-08-30 13:00:19

标签: r dplyr

说这是我的数据。

mydat=structure(list(ItemRelation = c(158200L, 158204L), DocumentNum = c(1715L, 
1715L), CalendarYear = c(2018L, 2018L), X1 = c(0L, 0L), X2 = c(0L, 
0L), X3 = c(0L, 0L), X4 = c(NA, NA), X5 = c(107L, 105L), X6 = c(NA, 
NA)), .Names = c("ItemRelation", "DocumentNum", "CalendarYear", 
"X1", "X2", "X3", "X4", "X5", "X6"), class = "data.frame", row.names = c(NA, 
-2L))

如何创建条件,如果X6=NA,然后将NA替换为X5的值?

在此示例中,所需的输出将是:

  ItemRelation DocumentNum CalendarYear X1 X2 X3 X4  X5  X6
1       158200        1715         2018  0  0  0 NA 107 107
2       158204        1715         2018  0  0  0 NA 105 105

1 个答案:

答案 0 :(得分:0)

您可以在基本R中使用sapply

mydat[,c("X5","X6")] <- with(mydat, sapply(mydat[8:9],function(x) ifelse(is.na(X6),X5,X6)))

提供所需的解决方案:

  ItemRelation DocumentNum CalendarYear X1 X2 X3 X4  X5  X6
1       158200        1715         2018  0  0  0 NA 107 107
2       158204        1715         2018  0  0  0 NA 105 105

说明:

ifelse检查给定行的X6值是否为NA,如果是,则从该行中选择X5的值。如果X6 not NA,则仅使用X6

sapply可让您快速将此ifelse函数应用于data.frame的每一行。

with更改了环境,以便您位于mydat对象中,这样您就可以引用其各个部分,而无需使用$[]