如何根据 R 中其他数据框中的信息创建矩阵?
How to create a matrix based on information in other dataframe in R?
我有一个包含基因名称和 miRNA 相互作用信息的数据框。数据框如下所示:
df:
Gene miRNA
ACP1 hsa-let-7a-5p
AGO4 hsa-let-7a-5p
AMMECR1 hsa-let-7a-5p
ATM hsa-miR-100-5p
BMPR2 hsa-miR-100-5p
AGO1 hsa-miR-107
AGO2 hsa-miR-107
AGO3 hsa-miR-107
利用上面的基因-miRNA相互作用信息,我想做一个矩阵。如果有交互我想分配 1 如果不是 0。矩阵应该如下所示:
hsa-let-7a-5p hsa-miR-100-5p hsa-miR-107
ACP1 1 0 0
AGO4 1 0 0
AMMECR1 1 0 0
ATM 0 1 0
BMPR2 0 1 0
AGO1 0 0 1
AGO2 0 0 1
AGO3 0 0 1
我尝试为此使用 xtabs
。无法正确使用。
xtabs(c(1L, 0L)[miRNA] ~ ., data=df)
结果如下所示:
Gene
ACP1 AGO1 AGO2 AGO3 AGO4 AMMECR1 ATM BMPR2
1 0 0 0 1 1 0 0
感谢任何帮助。谢谢
我们可以使用 mutate
创建一个虚拟列并使用 pivot_wider
将数据转换为宽格式。
library(dplyr)
library(tidyr) # version ‘1.0.0’
df %>%
mutate(n = 1) %>%
pivot_wider(names_from = miRNA, values_from = n, values_fill = list(n = 0))
#OR
#spread(miRNA, n, fill = 0) in old tidyr
# Gene `hsa-let-7a-5p` `hsa-miR-100-5p` `hsa-miR-107`
# <fct> <dbl> <dbl> <dbl>
#1 ACP1 1 0 0
#2 AGO4 1 0 0
#3 AMMECR1 1 0 0
#4 ATM 0 1 0
#5 BMPR2 0 1 0
#6 AGO1 0 0 1
#7 AGO2 0 0 1
#8 AGO3 0 0 1
如果 Gene
和 miRNA
各有一行以上,请先使用 distinct
。
df %>%
distinct() %>%
mutate(n = 1) %>%
pivot_wider(names_from = miRNA, values_from = n, values_fill = list(n = 0))
我有一个包含基因名称和 miRNA 相互作用信息的数据框。数据框如下所示:
df:
Gene miRNA
ACP1 hsa-let-7a-5p
AGO4 hsa-let-7a-5p
AMMECR1 hsa-let-7a-5p
ATM hsa-miR-100-5p
BMPR2 hsa-miR-100-5p
AGO1 hsa-miR-107
AGO2 hsa-miR-107
AGO3 hsa-miR-107
利用上面的基因-miRNA相互作用信息,我想做一个矩阵。如果有交互我想分配 1 如果不是 0。矩阵应该如下所示:
hsa-let-7a-5p hsa-miR-100-5p hsa-miR-107
ACP1 1 0 0
AGO4 1 0 0
AMMECR1 1 0 0
ATM 0 1 0
BMPR2 0 1 0
AGO1 0 0 1
AGO2 0 0 1
AGO3 0 0 1
我尝试为此使用 xtabs
。无法正确使用。
xtabs(c(1L, 0L)[miRNA] ~ ., data=df)
结果如下所示:
Gene
ACP1 AGO1 AGO2 AGO3 AGO4 AMMECR1 ATM BMPR2
1 0 0 0 1 1 0 0
感谢任何帮助。谢谢
我们可以使用 mutate
创建一个虚拟列并使用 pivot_wider
将数据转换为宽格式。
library(dplyr)
library(tidyr) # version ‘1.0.0’
df %>%
mutate(n = 1) %>%
pivot_wider(names_from = miRNA, values_from = n, values_fill = list(n = 0))
#OR
#spread(miRNA, n, fill = 0) in old tidyr
# Gene `hsa-let-7a-5p` `hsa-miR-100-5p` `hsa-miR-107`
# <fct> <dbl> <dbl> <dbl>
#1 ACP1 1 0 0
#2 AGO4 1 0 0
#3 AMMECR1 1 0 0
#4 ATM 0 1 0
#5 BMPR2 0 1 0
#6 AGO1 0 0 1
#7 AGO2 0 0 1
#8 AGO3 0 0 1
如果 Gene
和 miRNA
各有一行以上,请先使用 distinct
。
df %>%
distinct() %>%
mutate(n = 1) %>%
pivot_wider(names_from = miRNA, values_from = n, values_fill = list(n = 0))