r - 如何合并两个数据框并根据巧合填充不同的选项
问题描述
我有两个数据框y
和z
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 和基因,并且在 ZI 中,第一行有相同的患者 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
推荐阅读
- java - 使用 @RequiresApi 或更改代码以适用于所有 api 版本
- java - 我的应用程序是多对一不工作的问题
- bash - 在 bash 脚本中间切换输出文件重定向
- docker - 从运行 Flask 的 docker 连接到 kerberos 安全的 hadoop 集群
- appstore-approval - 应用商店连接。无法转移应用程序,因为构建仍然有效
- symfony - symfony 3.4 根据用户的状态在页面上重定向用户
- kubernetes - Kibana 服务出现待处理
- prometheus - 如何在 Prometheus 中为磁盘空间配置警报
- kubernetes - 启动多个 kafka 代理失败
- laravel - 为什么我上传的某些视频编码失败(laravel ffmpeg)