这是一个非常简单的问题,但我希望有人能够帮助我避免额外的不必要的代码行。我有一个简单的数据框:
Df.1 <- data.frame(A = c(5,4,7,6,8,4),B = (c(1,5,2,4,9,1)),C=(c(2,3,NA,5,NA,9)))
Run Code Online (Sandbox Code Playgroud)
我想要做的是生成一个额外的列,它是 A、B 和 C 的乘法,然后我将其绑定到原始数据帧。
所以,我通常会使用:
attach(Df.1)
D<-A*B*C
Run Code Online (Sandbox Code Playgroud)
但显然 NA 位于 C 列中,我在变量 D 中得到 NA。我不想排除所有 NA 行,而只是忽略此列中的 NA 值(然后 D 中的值将只是A 和 B 的乘法,或者在 C 可用的情况下,A*B*C。
我知道我可以简单地将 NA 替换为 1,因此计算保持不变,或者使用 if 语句,但我想知道最简单的方法是什么?
有任何想法吗?
您可以使用prod带有参数的which na.rm。要按行执行此操作,请使用apply:
apply(Df.1,1,prod,na.rm=TRUE)
[1] 10 60 14 120 72 36
Run Code Online (Sandbox Code Playgroud)