将成对的值集转换为矩阵

时间:2014-11-16 03:57:02

标签: r

我想在R中转换以下数据框:

> df <- data.frame(cbind(rep(c("F1","F2","F3"),3), rep(c("F1","F2","F3"),each=3),c(1,2,3,4,5,6,7,8,9)))

进入以下矩阵:

mat <- matrix(c(1,2,3,4,5,6,7,8,9),nrow=3, dimnames=list(c("F1","F2","F3"), c("F1","F2","F3")))

似乎申请可能是候选人,但我似乎无法使语法正确。

非常感谢

2 个答案:

答案 0 :(得分:2)

尝试

 res <- xtabs(as.numeric(as.character(X3))~., df)
 attr(res, 'class') <- NULL
 attr(res, 'call') <- NULL
 dimnames(res) <- unname(dimnames(res))
 res
 #   F1 F2 F3
 #F1  1  4  7
 #F2  2  5  8
 #F3  3  6  9

或使用acast

中的reshape2
df$X3 <- as.numeric(as.character(df$X3))
acast(df, X1~X2, value.var='X3')
#   F1 F2 F3
#F1 1  4  7 
#F2 2  5  8 
#F3 3  6  9 

答案 1 :(得分:1)

library(dplyr)library(tidyr)

# assume df is your data frame
df %>% spread(X2, X3)
# you get
  X1 F1 F2 F3
1 F1  1  4  7
2 F2  2  5  8
3 F3  3  6  9

如果您单独使用library(tidyr),可以执行以下操作:

spread(df, X2, X3)