【问题标题】:How to convert a matrix into a table in r如何将矩阵转换为r中的表格
【发布时间】:2021-09-29 06:03:09
【问题描述】:

假设我有一个这样的矩阵

> main<-matrix(c(1,4,5,7,NA,NA,NA,NA,3,6,12,3,45,NA,NA,NA,5,9,12,14,3,9,7,2),nrow=3,byrow = TRUE)
> main
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,]    1    4    5    7   NA   NA   NA   NA
[2,]    3    6   12    3   45   NA   NA   NA
[3,]    5    9   12   14    3    9    7    2

我想创建一个 2 列 3 行的表格,如下所示:


  Topic_no        Object/Transcript
  Topic 1          1, 4, 5, 7
  Topic 2          3, 6, 12, 3, 45
  Topic 3          5, 9, 12, 14, 3, 9, 7, 2

我该怎么做?

【问题讨论】:

    标签: r dataframe matrix


    【解决方案1】:

    base R中,用applyMARGIN = 1paste将非NA元素作为字符串循环矩阵的行,创建一个两列data.frame以及一个序列列为“Topic_no”创建

    data.frame(Topic_no = paste('Topic', seq_len(nrow(main))), 
            Object_Transcript =  apply(main, 1, function(x) 
                toString(x[complete.cases(x)])))
    

    -输出

     Topic_no        Object_Transcript
    1  Topic 1               1, 4, 5, 7
    2  Topic 2          3, 6, 12, 3, 45
    3  Topic 3 5, 9, 12, 14, 3, 9, 7, 2
    

    【讨论】:

    • 你太快了,我正在删除我的答案:)
    • 哈哈,我正要发布我的答案,但发现你的答案已经在那里,所以我取消了它。
    • @akrun 谢谢你,答案很有帮助。你能帮忙做一件事吗,假设我想要一个表,其中第一列被命名为对象/成绩单(列中的值是单个条目,它们就像 1、2、3、...)和第二列我们想知道哪个主题属于该转录本/对象的列。
    【解决方案2】:

    这是来自tidyrunite 的解决方案:

    1. 矩阵与as_tibble()
    2. 使用unite 将所有列合并为一个并带有争论remove = TRUE
    3. 删除最后一个逗号后的所有字符
    4. 变异Topic
    library(tidyr)
    library(dplyr)
    main %>% 
      as_tibble() %>% 
      unite(`Object/Transcript`, V1:V8, sep = ",", remove = TRUE) %>% 
      mutate(`Object/Transcript` = sub("(\\d)[^0-9]+$", "\\1", `Object/Transcript`)) %>%   
      mutate(Topic_no = paste0("Topic ", row_number()), .before=1)
    

    输出:

      Topic_no `Object/Transcript`
      <chr>    <chr>              
    1 Topic 1  1,4,5,7            
    2 Topic 2  3,6,12,3,45        
    3 Topic 3  5,9,12,14,3,9,7,2 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-22
      • 2013-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-09
      相关资源
      最近更新 更多