重新整理R中的资料框

时间:2018-11-16 20:02:26

标签: r dataframe

我在R中有一个数据帧,如下所示:

A <- c(7,2,7)
B <- c(1,8,4)
C <- c(9,4,3)
Category <- c("A","B","C")

df <- data.frame(Category, A, B, C)

数据框如下:

  Category | A | B | C
 -----------------------
     A       7   1   9
     B       2   8   4
     C       7   4   3

如何重组r中的数据框以获取以下输出?

Category | Category | Value
---------------------------
    A         A         7    
    A         B         1
    A         C         9
    B         A         2
    B         B         8
    B         C         4
    C         A         7
    C         B         4
    C         C         3

2 个答案:

答案 0 :(得分:3)

一种方法是通过收集数据来使用tidverse,然后在收集数据后将一列重命名为具有相同名称的两列。

library(tidyr)
library(dplyr)

df %>% 
  gather(Category2, Value, -Category) %>% 
  arrange(Category, Category2) %>% 
  rename(Category=Category2)

答案 1 :(得分:2)

一个更简单的选择是在不添加第一列的情况下转置数据集,然后将列名称更改为“类别”值,并在赋予data.frame属性后将其转换为table

as.data.frame.table(`colnames<-`(t(df[-1]), df$Category))[c(2, 1, 3)]
#   Var2 Var1 Freq
#1    A    A    7
#2    A    B    1
#3    A    C    9
#4    B    A    2
#5    B    B    8
#6    B    C    4
#7    C    A    7
#8    C    B    4
#9    C    C    3

或转换为melt后使用matrix

library(reshape)
melt(as.matrix(`row.names<-`(df[-1], df$Category)))