从数据帧 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
这是一个基于 tidyr
的 pivot_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
它需要一些工作,因为小标题不喜欢行名。
我正在研究聚类,我需要在矩阵中转换我的数据。 这是我的 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
这是一个基于 tidyr
的 pivot_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
它需要一些工作,因为小标题不喜欢行名。