我在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
答案 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)))