转置矩阵R.

时间:2014-07-17 10:34:38

标签: r reshape transpose

我在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

4 个答案:

答案 0 :(得分:5)

如果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

答案 1 :(得分:4)

要给基础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

答案 2 :(得分:2)

我认为您正在寻找包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)

答案 3 :(得分:0)

我认为您可以使用t()函数对矩阵进行转置。