【问题标题】:compare rows with sweep function - how to do it properly?使用扫描功能比较行 - 如何正确执行?
【发布时间】:2021-10-29 22:26:40
【问题描述】:

只是尝试使用“扫描”比较两个数据帧的第一行。不幸的是,如果满足条件,则该函数仅返回 FALSE,即 x 大于 y。如果 x 等于 y,我想要相同的 FALSE 输出。不幸的是,我的尝试没有奏效,我不明白为什么。如果 x 等于 y,仍然有 TRUE,但应该有 FALSE。请帮忙:

colvec <- c("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m")
gap_size_uncut <-  as.data.frame(rbind(c(6,1,5,1,1,1,4,5,26,3,35,23,3)))
NA_Count       <-  as.data.frame(rbind(c(3,6,5,7,1,3,4,6,1,0,1,1,3)))
colnames(gap_size_uncut) <- colvec
colnames(NA_Count) <- colvec

sweep(as.matrix(gap_size_uncut[1,]), 1, as.matrix(NA_Count[1,]),
      FUN = function(x,y) (x <= y ), 
      check.margin = FALSE)
NA_Count
gap_size_uncut

【问题讨论】:

    标签: r functional-programming data-manipulation


    【解决方案1】:

    sweepMARGIN = 2 一起使用。

    sweep(gap_size_uncut[1,], 2, NA_Count[1,], `<=`)
    
    #      a    b    c    d    e    f    g    h     i     j     k     l    m
    #1 FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE TRUE
    

    如果尺寸相同,您可以直接比较两个数据框,无需sweep

    gap_size_uncut <= NA_Count
    
    #         a    b    c    d    e    f    g    h     i     j     k     l    m
    #[1,] FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE TRUE
    

    【讨论】:

    • 很高兴知道!第二种解决方案要简洁得多。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2017-01-17
    • 2012-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-03
    • 2023-03-03
    相关资源
    最近更新 更多