删除仅包含NaN / NA / 0值的行

时间:2015-09-17 07:36:45

标签: r

我的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

我们怎么能这样做? 感谢

1 个答案:

答案 0 :(得分:2)

我们使用array遍历MARGIN=3(' ar1')并使用rowSums对数组元素进行子集化。

apply(ar1, 3, function(x) 
       x[(rowSums(!is.na(x))!=0)|(rowSums(x, na.rm=TRUE)!=0),]) 

或者我们可以使用rowSumsna.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