说这是我的数据。
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
答案 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
对象中,这样您就可以引用其各个部分,而无需使用$
或[]
。