【问题标题】:Turning a presence-absence matrix into a single variable per row in R将存在-不存在矩阵转换为R中每行的单个变量
【发布时间】:2019-09-08 21:43:19
【问题描述】:

我对每个单独的 ID 都有一个在场缺席矩阵(由 1 和 0 组成)。它基于标记重新捕获数据。每列代表一个采样日期。作为一个数据框,它看起来像这样(前 3 行):

    ID        X X.1 X.2 X.3 X.4 X.5  Sex
    2014-001  0   0   1   0   1   0  F
    2014-002  0   0   1   1   0   0  M
    2014-003  0   1   0   0   1   1  F

我需要一个看起来像这样的最终产品:

        ch     Sex
    1   001010 F
    2   001100 M
    3   010011 F

【问题讨论】:

    标签: r matrix merge


    【解决方案1】:

    我们可以使用paste0do.call 来粘贴感兴趣的列的行,cbind 和最后一列

    nm1 <- grep("^X(\\.\\d+)*", names(df1), value = TRUE)
    cbind(ch = do.call(paste0, df1[nm1]), df1["Sex"])
    #      ch Sex
    #1 001010   F
    #2 001100   M
    #3 010011   F
    

    【讨论】:

      【解决方案2】:

      这里还有一个tidyverse 解决方案:

      library(tidyverse)
      
      df <- read.table(
        h = T,
        text = "ID        X X.1 X.2 X.3 X.4 X.5  Sex
                2014-001  0   0   1   0   1   0  F
                2014-002  0   0   1   1   0   0  M
                2014-003  0   1   0   0   1   1  F"
      )
      
      df %>% 
        unite(ch, X:X.5, sep = "") %>% 
        select(-ID)
      #>       ch Sex
      #> 1 001010   F
      #> 2 001100   M
      #> 3 010011   F
      

      reprex package (v0.2.1) 于 2019 年 4 月 18 日创建

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-06
        • 1970-01-01
        • 2023-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-01
        • 2013-02-12
        相关资源
        最近更新 更多