【问题标题】:transpose matrix R转置矩阵 R
【发布时间】:2014-09-08 04:30:50
【问题描述】:

我在 R 中有一个数据框,我想转置为不同的格式,请参见下面的示例:我可以在 R 中使用转置功能吗?

输入数据框:

Samples          A1    A2      A3     B1     B2       B3

Sample1         123    123     321    32     321       32132 
Sample2         12321  32321   2321   2313   3213      3123  
Sample3         454    54      543    543    43        435

期望的输出:

Samples           1      2       3    

Sample1   A       123    123     321     
Sample1   B       32     321     32132
Sample2   A       12321  32321   2321     
Sample2   B       2313   3213    3123
Sample3   A       454    54      543
Sample3   B       543    43      435

【问题讨论】:

    标签: r reshape transpose


    【解决方案1】:

    如果d 是数据集

    使用dplyr

    library(dplyr)
    library(tidyr)
    library(stringr)
     d%>%
     gather(Var, Val,A1:B3) %>%
     mutate(VarN= str_extract(Var,"[A-Z]+"), indx= str_extract(Var, "\\d+")) %>% 
     select(-Var) %>% 
     spread(indx, Val)
      #    Samples VarN   1     2     3
      #1 Sample1    A   123   123   321
      #2 Sample1    B    32   321 32132
      #3 Sample2    A 12321 32321  2321
      #4 Sample2    B  2313  3213  3123
      #5 Sample3    A   454    54   543
      #6 Sample3    B   543    43   435
    

    【讨论】:

      【解决方案2】:

      要为基础 R 提供一些道具,请查看 reshape() 函数。假设您的 data.frame 被称为“mydf”,请尝试:

      reshape(mydf, direction = "long", 
              idvar="Samples", varying=2:ncol(mydf), 
              v.names=c("1", "2", "3"), times = c("A", "B"))
                Samples time     1     2     3
      Sample1.A Sample1    A   123   123   321
      Sample2.A Sample2    A 12321 32321  2321
      Sample3.A Sample3    A   454    54   543
      Sample1.B Sample1    B    32   321 32132
      Sample2.B Sample2    B  2313  3213  3123
      Sample3.B Sample3    B   543    43   435
      

      【讨论】:

        【解决方案3】:

        我认为您正在寻找包裹reshape2。它有两个功能,meltdcast,可以帮助你完成你想要的。

        d <- melt(d, id.vars = "Samples")
        d$type <- 0
        for (i in 1:3) d$type[grep(i, d$variable)] <- i
        d$variable <- substr(d$variable, 1, 1)
        d <- dcast(d, Samples + variable ~ type)
        

        【讨论】:

          【解决方案4】:

          我认为你可以使用t() 函数来转置矩阵。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-11-02
            • 2016-09-28
            • 2018-04-11
            • 2020-09-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多