【问题标题】:remove row if there are zeros in 2 specific columns (R)如果 2 个特定列 (R) 中有零,则删除行
【发布时间】:2020-05-16 00:07:43
【问题描述】:

我有一个这样的数据框

    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 列和第 2 列中具有零的行。

预期结果:

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

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    我们可以使用rowSums 来创建一个逻辑向量。即子集'mk'的前两列,检查它是否等于0,获取逻辑矩阵的rowSums并转换为&lt; 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"
        )))
    

    【讨论】:

    • 它有效。谢谢!你能解释一下
    • @Manuel 在这里,我们使用 2 列是 1 和 2,并且我们想要 0 的数量小于 2 的行,即。并非所有元素都是 0
    • @Manuel 为此只需更改索引mk[, c(1, 3)] 而不是mk[, 1:2] : 是序列,因为如果您想要列从1 到5 1:5,对于选定的@987654334 @
    猜你喜欢
    • 2020-05-28
    • 2022-01-12
    • 2011-10-27
    • 1970-01-01
    • 2022-11-04
    • 2017-07-17
    • 2021-03-26
    • 2019-06-19
    • 2014-06-25
    相关资源
    最近更新 更多