我有一个包含两列(基因组)的数据框和一个包含一列(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
仅使用 1 个数据框 (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 中的所有元素都出现在 Genome 中,因此绝对可以肯定这不是没有发现任何巧合的问题。
编辑:
我开始意识到我的例子没有指定 list_SSNP 和 Genome 中的条目是唯一的并且没有重复,并且 Genome 有大约 30k 行条目,而 list_SSNP 有 49。我只想在 Genome 中添加一列和一个条目在 Genome 和 list_SSNP 中都存在的那些行中的数字 1。
我相信这会有所帮助。你可以试试这个代码:
#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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句