将数据帧转换为R中的矩阵

将数据帧转换为R中的矩阵,r,matrix,dataframe,R,Matrix,Dataframe,我想将数据帧转换为R中的矩阵,如下例所示: df row.index column.index矩阵元素 11A 1.2 B 2 1 C 二维 矩阵 A B C D我们可以使用tapply tapply(df$matrixelement, df[1:2], FUN = I) 它也适用于第二个数据集 res <- tapply(df1$matrixelement, df1[1:2], FUN = I) names(dimnames(res)) <- NULL res # P

我想将数据帧转换为R中的矩阵,如下例所示:

df
row.index column.index矩阵元素
11A
1.2 B
2 1 C
二维
矩阵
A B

C D
我们可以使用
tapply

tapply(df$matrixelement, df[1:2], FUN = I)
它也适用于第二个数据集

res <- tapply(df1$matrixelement, df1[1:2], FUN = I)
names(dimnames(res)) <- NULL
res
#   P   Q  
#X "A" "B"
#Y "C" "D"
数据
df我在tapply上得到一个错误:sort.list(y)中的错误:'x'必须是'sort.list'的原子,你在列表中调用了'sort'吗?@mac我假设你有一个data.frame作为输入。请检查我帖子中的数据。将数据(可能是矩阵)转换为data.fframe,然后运行它,即
df它是一个data.table。我错误地认为data.table的行为总是类似于data。frame@mac对于我显示的数据,它是一个
矩阵
,即
是.matrix(res)#[1]TRUE
,在这里,我们假设有相同的长度组合groups@mac如果它不是对称的,在通过分组变量创建序列列之后,最好使用
dcast
。对于案例1
matrix(df$matrixelement,nrow=max(df$row.index),byrow=TRUE)
似乎可以做到这一点。对于案例2
length(唯一(df1$row.name))
in
nrow
将执行此操作。然后可以设置
colnames
rownames
library(reshape2)
dcast(df, row.index ~column.index)
df <- structure(list(row.index = c(1L, 1L, 2L, 2L), column.index = c(1L, 
2L, 1L, 2L), matrixelement = c("A", "B", "C", "D")), .Names = c("row.index", 
"column.index", "matrixelement"), class = "data.frame", row.names = c(NA, 
-4L))

df1 <- structure(list(row.name = c("X", "X", "Y", "Y"), column.name = c("P", 
"Q", "P", "Q"), matrixelement = c("A", "B", "C", "D")), .Names = c("row.name", 
"column.name", "matrixelement"), class = "data.frame", row.names = c(NA, 
-4L))