我想在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")))
似乎申请可能是候选人,但我似乎无法使语法正确。
非常感谢
答案 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)