从数据帧 R 中获取矩阵

Obtain a matrix from a dataframe R

我正在研究聚类,我需要在矩阵中转换我的数据。 这是我的 df:

       el1 el2 value
    1   a   x     1
    2   a   y     2
    3   a   z     3
    2   b   x     2
    3   b   y     3
    3   b   z     3

我需要在矩阵中转换它,将 el1 和 el2 作为行和列名称以及相应的值。

  x y z 
a 1 2 3
b 2 3 3

我该怎么办?谢谢!

使用 reshape2 和一些魔法(我创建了自己的数据)

df=read.table(text="
el1 el2 value
a   w     1
a   x     2
a   y     3
a   z     4
b   x     1
b   y     2
b   z     3
c   y     1
c   z     2
d   z     1",h=T)

然后

library(reshape2)
df2=dcast(
  df,
  el1~el2,
  value.var="value"
)
rownames(df2)=df2$el1
df2=subset(df2,select=-c(el1))

   w  x  y z
a  1  2  3 4
b NA  1  2 3
c NA NA  1 2
d NA NA NA 1

如果您的原始数据仅包含矩阵的上三角或下三角的数据,那么您可以使用

复制另一个
df2[lower.tri(df2)]=t(df2)[lower.tri(df2)]

使用 xtabs 的基础 R 选项

> xtabs(value ~ ., df)
   el2
el1 x y z
  a 1 2 3
  b 2 3 3

这是一个基于 tidyrpivot_wider 函数的解决方案:

library(dplyr)
library(magrittr)
library(tidyr)

res <- df %>% 
  pivot_wider(
    id_cols = el1,
    names_from = el2,
    values_from = value) %>% 
  data.frame()

rownames(res) <- res$el1

(res %<>% select(-el1))

  x y z
a 1 2 3
b 2 3 3

它需要一些工作,因为小标题不喜欢行名。