我的tapply
函数输出有很多NaN值
with(wushang, tapply(Profit.margin, list(Supplier, Mode.of.operations,Category),mean))
简化输出如下所示
[01] Category A
[1] Distribution [2] Reseller [4] Joint venture
[00000] 3.090000e+00 NA NA
[10005] NA NA NA
[10008] NA NA NA
[10009] NA NA NA
[10011] NA NA NA
[10012] NA NA NA
[10013] NA NA NA
[10017] NA NA NA
[10018] NA NA NA
[01] B类
[1] Distribution [2] Reseller [4] Joint venture
[00000] 3.090000e+00 NA NA
[10005] NA NA NA
[10008] NA NA NA
[10009] NA 4660000e+00 NA
[10011] NA NA NA
[10012] NA NA NA
[10013] NA NA NA
[10017] NA NA NA
[10018] NA NA NA
所以我想删除那些只有NA,NaN或零值的行。 所以预期的产出将是
[01] Category A
[1] Distribution [2] Reseller [4] Joint venture
[00000] 3.090000e+00 0 0
[01] Category B
[1] Distribution [2] Reseller [4] Joint venture
[00000] 3.090000e+00 0 0
[10009] 0 4.60000e+00 0
我们怎么能这样做? 感谢
答案 0 :(得分:2)
我们使用array
遍历MARGIN=3
(' ar1')并使用rowSums
对数组元素进行子集化。
apply(ar1, 3, function(x)
x[(rowSums(!is.na(x))!=0)|(rowSums(x, na.rm=TRUE)!=0),])
或者我们可以使用rowSums
与na.rm=TRUE
一起使用!=0
。如果值全部为0或全部为NA,则在一行中,它将返回0,转换为逻辑向量(apply(ar1, 3, function(x) x[rowSums(x, na.rm=TRUE)!=0,])
)并对其余行进行子集化。
glUseProgram(m_shaderProgramHandle); //bind program
glUseProgram(0); //unbind a program