在 R 中用 df 制作矩阵

Make a matrix out of a df in R

提问人:Ahmed Hassan 提问时间:5/18/2022 最后编辑:MattAhmed Hassan 更新时间:5/19/2022 访问量:44

问:

所以我有一张看起来像这样的表

name <- c("AGTC","ATTC","ATGC", "ATCC")
Var1 <- c("TRA11","TRA8","TRA9", "TRA9")
Var2 <- c("TRB1", "TRB15", "TRB7", "TRB7")
df <-data.frame(name, Var1, Var2)

df
  name  Var1  Var2
1 AGTC TRA11  TRB1
2 ATTC  TRA8 TRB15
3 ATGC  TRA9  TRB7
4 ATCC  TRA9  TRB7

我想要一个这样的矩阵,这样我就可以绘制一个 circos 图

       TRA11  TRA8  TRA9 
TRB1     1      0     0
TRB15    0      1     0
TRB7     0      0     2

我设法从矩阵开始修复,但我不知道如何填写值,

A <- sort(unique(unlist(strsplit(paste(df$Var1, collapse=","), ","))))
B <- sort(unique(unlist(strsplit(paste(eee$Var2, collapse=","), ","))))
mat <- matrix(nrow = length(A), ncol = length(B))
colnames(mat) <- B
rownames(mat) <- A

mat
       TRA11  TRA8  TRA9 
TRB1     0      0     0
TRB15    0      0     0
TRB7     0      0     0

我将不胜感激。

多谢

R 数据帧 ggplot2 tidyverse circos

评论


答:

0赞 Onyambu 5/18/2022 #1
table(df[-1])

       Var2
Var1    TRB1 TRB15 TRB7
  TRA11    1     0    0
  TRA8     0     1    0
  TRA9     0     0    2

如果希望将其作为数据帧:

as.data.frame.matrix(table(df[-1]))

      TRB1 TRB15 TRB7
TRA11    1     0    0
TRA8     0     1    0
TRA9     0     0    2

评论

0赞 Chris 5/18/2022
我对自己说,但不是 [-1],你能详细说明一下吗?table(df)
0赞 Onyambu 5/18/2022
@Chris看看所需的输出。这应该给你一个想法。希望您知道表格功能的作用
0赞 Ahmed Hassan 5/18/2022 #2

所以我设法做到了这一点,

tb <- with(df, table(df$Var1, df$Var2))
a <- as.matrix(tb)

它就像一个魅力。

谢谢大家

评论

1赞 Onyambu 5/18/2022
为什么使用后会使用 $?with
0赞 Community 5/19/2022
正如目前所写的那样,你的答案尚不清楚。请编辑以添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。您可以在帮助中心找到有关如何写出好答案的更多信息。
0赞 Ahmed Hassan 5/19/2022
我使用的 df 不止这两列,这就是我使用 $ 的原因,这样我就可以定义要使用的列。