r语言 - 如何合并两个数据帧,并根据巧合填充不同的选项



我有两个数据帧yz

y <- data.frame(ID = c("A", "A", "A", "B", "B"), gene = c("a", "b", "c", "a", "c"))
z <- data.frame(A = c(2,6,3), B = c(8,4,9), C=c(1,6,2))
rownames(z) <- c("a", "b", "c")

因此,对于y,我有一个包含每个患者的患者ID和基因的表,对于Z,我在第一行中有相同的患者ID和具有特定值的基因列表(这里不重要)。y中的基因在z中,但z中有一些基因不包含在y中。我要做的是将这些帧设置为merge并添加如下内容:

a   b   c
A      1   1   1 
B      1   0   1 

因此对于每个病人,如果z中的基因也存在于y,中,则填1,如果不存在,则填0

我真的不知道如何处理这个,你有什么主意吗?谢谢你

我从你的问题中做出了RE(下次把这个添加到你的问题中):

y <- data.frame(ID = c("id_A", "id_A", "id_A", "id_B", "id_B"), gene = c("a", "b", "c", "a", "c"))
z <- data.frame(id_A = c(2,6,3), id_B = c(8,4,9), id_C=c(1,6,2))
rownames(z) <- c("a", "b", "c")

这里的想法是pivot_longer你的表,这样你可以更容易地连接。

为此,您首先需要将您的行名放入一个字段中:

z <- tibble::rownames_to_column(z, "gene")

然后,您的z表透视时间更长:

library(tidyr)
z_long <- pivot_longer(z, starts_with("id_"), names_to = "ID")

并将其与y表连接:

library(dplyr)
table_join <- left_join(y, z_long)

最后,你只需要计算频率:

table(table_join$ID, table_join$gene)

a b c
id_A 1 1 1
id_B 1 0 1

最新更新