【问题标题】:Check values in columns of data table and return new table based on condition in R检查数据表列中的值并根据R中的条件返回新表
【发布时间】:2019-10-16 10:49:27
【问题描述】:

我有一张这样的桌子:

  V1    V2   V3 V4 V5 V6 V7 V8 V9 
  1     1  7512  1  0  0  0  0  0  
  1  7506 10949  0  0  0  0  0  1
  1 10943 13175  0  0  0  0  0  0      
  1 13169 20070  0  1  1  0  0  0

表格中的每一行都是一个片段,因此片段编号为4。con1包括V4、V5、V6和con2 V7、V8、V9 我想在 R 中创建一个新表,我将在其中检查 con1 和 con 2 中的元素是零还是一。如果每个条件的元素中至少有 1 个,则覆盖,否则不覆盖 所以表格看起来像这样:

label fragnum covered uncovered 
con1  4       2       2 
con2  4       1       3

【问题讨论】:

    标签: r compare multiple-columns


    【解决方案1】:

    dplyrtidyr 的一种可能性可能是:

    df %>%
     transmute(con1 = if_else(rowSums(select(., V4:V6)) > 0, "covered", "uncovered"),
               con2 = if_else(rowSums(select(., V7:V9)) > 0, "covered", "uncovered"),
               fragnum = n()) %>%
     pivot_longer(names_to = "variables", values_to = "values", -fragnum) %>%
     count(fragnum, variables, values) %>%
     pivot_wider(names_from = "values", values_from = "n")
    
      fragnum variables covered uncovered
        <int> <chr>       <int>     <int>
    1       4 con1            2         2
    2       4 con2            1         3
    

    【讨论】:

      【解决方案2】:

      base 中,您可以对特定列使用 rowSums,以查看每行是否有 1,例如:

      tt  <- sapply(list(c("V4", "V5", "V6"), c("V7", "V8", "V9"))
                    , function(i) sum(rowSums(x[,i]) > 0))
      
      data.frame(label=c("con1", "con2"), fragnum=nrow(x), covered=tt
               , uncovered=nrow(x) - tt)
      #  label fragnum covered uncovered
      #1  con1       4       2         2
      #2  con2       4       1         3
      

      数据:

      x <- structure(list(V1 = c(1L, 1L, 1L, 1L), V2 = c(1L, 7506L, 10943L, 
      13169L), V3 = c(7512L, 10949L, 13175L, 20070L), V4 = c(1L, 0L, 
      0L, 0L), V5 = c(0L, 0L, 0L, 1L), V6 = c(0L, 0L, 0L, 1L), V7 = c(0L, 
      0L, 0L, 0L), V8 = c(0L, 0L, 0L, 0L), V9 = c(0L, 1L, 0L, 0L))
      , class = "data.frame", row.names = c(NA, -4L))
      

      【讨论】:

        猜你喜欢
        • 2022-07-21
        • 1970-01-01
        • 1970-01-01
        • 2021-08-28
        • 1970-01-01
        • 2021-07-11
        • 1970-01-01
        • 1970-01-01
        • 2015-07-19
        相关资源
        最近更新 更多