如果2个特定列(R)中有零,则删除行

时间:2020-05-16 00:07:43

标签: r dataframe

我有一个这样的数据框

<span class=”reply”><?php comment_reply_link(array_merge( $args, array(‘add_below’ => $add_below, ‘depth’ => $depth, ‘max_depth’ => $args[‘max_depth’], reply_text => ‘Comment Reply’))) ?></span>**

并且仅当列1和2中包含零的行才需要删除。到目前为止,我已经设法删除了所有带有零的列:

    col1 col2 col3 col4
row1   1   0     6    7
row2   5   7     0    6
row3   0   0     4    6

但是不知道如何只限制第1和第2列中的零行。

预期结果:

mk<-mk[apply(mk!=0, 1, all),]

1 个答案:

答案 0 :(得分:2)

我们可以使用rowSums创建一个逻辑向量。例如,将“ mk”的前两列作为子集,检查其是否等于0,获得逻辑矩阵的rowSums并使用< 2转换为逻辑向量,并将其用作子集的行索引行

mk[rowSums(mk[, 1:2] == 0) < 2,]
#     col1 col2 col3 col4
#row1    1    0    6    7
#row2    5    7    0    6

或使用apply

mk[!apply(mk[, 1:2]==0, 1, all),]
#     col1 col2 col3 col4
#row1    1    0    6    7
#row2    5    7    0    6

或与any

mk[apply(mk[, 1:2], 1, any),]

数据

mk <- structure(c(1L, 5L, 0L, 0L, 7L, 0L, 6L, 0L, 4L, 7L, 6L, 6L), 
.Dim = 3:4, .Dimnames = list(
    c("row1", "row2", "row3"),
    c("col1", "col2", "col3", "col4"
    )))