我有一个有两列的数据帧(基因组)和一个有一列的数据帧(list_SSNP)。
我尝试做的是在我的基因组数据框中添加第三列和第四列,并为基因组中出现在list_SSNP和list_SCPG中的位置添加值"1“。
我正在尝试获取如下所示的输出数据帧:
Gene_Symbol CHR SNP
A1BG 19q13.43
PDE1C 12p13.31 1
这是Genome内容的一部分,我提供了一个可重现的例子:
Genome <- c()
Genome$Gene_Symbol <- c("A1BG", "A1BG-AS1", "A1CF", "A2M", "PDE1C")
Genome$CHR <- c("19q13.43", "19q13.43", "10q11.23", "12p13.31", "12p13.31")
Gene_Symbol CHR
1 A1BG 19q13.43
2 A1BG-AS1 19q13.43
3 A1CF 10q11.23
4 A2M 12p13.31
5 PDE1C 12p13.31
这是list_SSNP内容的一部分:
list_SSNP <- c("PDE1C", "IMMP2L", "ZCCHC14", "NOS1AP", "HARBI1")
Gene_Symbol
1 PDE1C
2 IMMP2L
3 ZCCHC14
4 NOS1AP
5 HARBI1
只使用一个数据帧( list_SSNP ),这是我首先尝试做的,我尝试做的是在基因组数据帧和我的基因组中的元素i(行)之间循环,如果我的list_SSNP数据帧的元素i类似于我的基因组数据帧中的元素i,然后将数字1添加到第三列,但是当我执行这段代码时,什么也没有发生。
Full_genome <- read.table("FULL_GENOME.txt", header=TRUE, sep = "\t", dec = ',', na.strings=c("","NA"), fill=TRUE)
Genome <- Full_genome[,c(2,3)]
names(Genome) <- c("Gene_Symbol", "CHR")
list_SSNP <- as.data.frame(Gene_SSNP$Gene_Symbol)
for (i in 1: dim (Genome) [1]) {
if(list_SSNP[i] %in% Genome[i,1]){
Genome[i,3] <- 1
}
}
为了进一步澄清,我已经检查了list_SSNP中的所有元素都出现在基因组中,所以可以绝对确定这不是一个找不到任何重合的问题。
编辑:
我开始意识到,我的示例并没有指定list_SSNP和基因组中的条目是唯一的,没有重复的,基因组有大约30k行的条目,而list_SSNP有49行。我只想在Genome中添加一列,并在Genome和list_SSNP中存在条目的那些行中添加一个数字1。
发布于 2020-08-08 20:38:18
我相信这可能会有帮助。你可以试试这段代码:
#Data
Genome <- data.frame(Gene_Symbol = c("A1BG", "A1BG-AS1", "A1CF", "A2M", "PDE1C"),
CHR = c("19q13.43", "19q13.43", "10q11.23", "12p13.31", "12p13.31"),
stringsAsFactors = F)
list_SSNP <- c("PDE1C", "IMMP2L", "ZCCHC14", "NOS1AP", "HARBI1")
#Collapse
vecc <- paste0(list_SSNP,collapse = '|')
#Contrast
Genome$SNP <- as.numeric(grepl(pattern = vecc,x = Genome$Gene_Symbol))
输出:
Gene_Symbol CHR SNP
1 A1BG 19q13.43 0
2 A1BG-AS1 19q13.43 0
3 A1CF 10q11.23 0
4 A2M 12p13.31 0
5 PDE1C 12p13.31 1
发布于 2020-08-08 21:10:30
我在这里可能会遗漏一些重要的东西,但这个问题是针对它的领域而制定的。因此,当我放弃它时,我可能监督了我提出的解决方案中的一个问题。
但是,我知道list_SSNP可以多次使用SNP条目。因此,首先,您可以创建一个包含其出现次数的唯一SNP列表
library(dplyr)
list_SSNP = data.frame(SNP = c("PDE1C", "IMMP2L", "ZCCHC14", "NOS1AP", "HARBI1"))
unique_SSNP = list_SSNP %>%
group_by(SNP) %>%
# the summarize() could be replaced by count I guess, but I usually use this for more control
summarize(count = n())
现在你使用left_join
Genome = data.frame(Gene_Symbol = c("A1BG", "A1BG-AS1", "A1CF", "A2M", "PDE1C"),
CHR = c("19q13.43", "19q13.43", "10q11.23", "12p13.31", "12p13.31"),
stringsAsFactors = F)
Genome_extended = Genome %>%
left_join(unique_SSNP, by = c("Gene_Symbol" = "SNP"))
对于不存在的SNP,扩展数据帧中的count列将是NAs,您可以使用dplyr、tidyr甚至base R中的各种命令填充NAs。
https://stackoverflow.com/questions/63314147
复制相似问题