如何将单列转换为R中的行?

时间:2018-08-20 15:48:13

标签: r dataframe

这是一个示例表:

data.frame(A = c(1,2,3),
  B = c(2,4,2), 
  C = c(5,2,1), 
  class = c('apple', 'pear', 'banana'))

A   B   C   class
1   2   5   apple   
2   4   2   pear    
3   2   1   banana

我想要得到的最终结果:

name  apple  pear  banana
A     1      2     3    
B     2      4     2    
C     5      2     1    

我已经尝试过tidyr软件包中的gather()spread(),但它们不是我想要的方式。 仅供参考,原始表格的尺寸为1000 * 150,因此非常感谢您采用这种繁殖方式。

4 个答案:

答案 0 :(得分:2)

使用gatherspread将为您提供所需的输出:

> library(tidyr)
> df1 %>% gather(cols, values, A:C) %>% 
    spread(class, values)
  cols apple banana pear
1    A     1      3    2
2    B     2      2    4
3    C     5      1    2

您甚至可以使用reshape2软件包中的meltdcast

> library(reshape2)
> dcast(melt(df1), variable ~ class)
Using class as id variables
  variable apple banana pear
1        A     1      3    2
2        B     2      2    4
3        C     5      1    2

答案 1 :(得分:2)

将class列转换为行名,转置,转换为数据框,并将行名转换为name列。

library(magrittr)
library(tibble)

DF %>% 
   column_to_rownames("class") %>% 
   t %>% 
   as.data.frame %>% 
   rownames_to_column("name")

给予:

  name apple pear banana
1    A     1    2      3
2    B     2    4      2
3    C     5    2      1

答案 2 :(得分:2)

这是使用转置的基础R解决方案:

df <- data.frame(A,B,C, class, stringsAsFactors=FALSE)
out <- data.frame(t(df[c("A", "B", "C")]))
out <- cbind(names(df)[1:3], out)
names(out) <- c("name", df$class)
out

  name apple pear banana
A    A     1    2      3
B    B     2    4      2
C    C     5    2      1

Demo

答案 3 :(得分:0)

我建议使用

t()

转置功能。

df <- data.frame(A = c(1,2,3),
B = c(2,4,2), 
C = c(5,2,1), 
class = c('apple', 'pear', 'banana'))

转置之前,删除所需的列作为最终数据框中的列名。在这种情况下,第4列

new_colnames <- df[,4]
df <- df[,-4]

然后转置df,

df <- t(df)

然后将名称设置为new_colnames。

colnames(df) <- new_colnames