我有一个像这样的大型数据集(d1)。
SNP CHR POS A1 A2 OR P
rs10 7 92221824 A C 1.1008 0.2371
rs1000000 12 125456933 G A 0.9864 0.6714
rs10000010 4 21227772 C T 0.9710 0.2693
rs10000012 4 1347325 G C 1.0045 0.9087
rs10000013 4 36901464 C A 1.0198 0.5379
rs10000017 4 84997149 T C 0.9576 0.1912
我有一个像这样的小数据集(d2):
SNP CHR POS A1 A2 OR P
rs1000000 12 125456933 G A 0.9864 0.6714
rs10000017 4 84997149 T C 0.9576 0.1912
现在,我想删除d1中包含d2信息的所有日期设置信息。结果应该是这样的:
SNP CHR POS A1 A2 OR P
rs10 7 92221824 A C 1.1008 0.2371
rs10000010 4 21227772 C T 0.9710 0.2693
rs10000012 4 1347325 G C 1.0045 0.9087
rs10000013 4 36901464 C A 1.0198 0.5379
我尝试在这个网站上搜索看到类似的处理方法,但找不到答案。希望有人可以帮助我。非常感谢。
答案 0 :(得分:2)
我认为SNP
是唯一的密钥。
d1 <- read.table(text="SNP CHR POS A1 A2 OR P
rs10 7 92221824 A C 1.1008 0.2371
rs1000000 12 125456933 G A 0.9864 0.6714
rs10000010 4 21227772 C T 0.9710 0.2693
rs10000012 4 1347325 G C 1.0045 0.9087
rs10000013 4 36901464 C A 1.0198 0.5379
rs10000017 4 84997149 T C 0.9576 0.1912", header=TRUE, stringsAsFactors=FALSE)
d2 <- read.table(text=" SNP CHR POS A1 A2 OR P
rs1000000 12 125456933 G A 0.9864 0.6714
rs10000017 4 84997149 T C 0.9576 0.1912", header=TRUE, stringsAsFactors=FALSE)
library(data.table)
d1 <- data.table(d1, key="SNP")
d2 <- data.table(d2, key="SNP")
d1[!J(d2)]
# SNP CHR POS A1 A2 OR P
#1: rs10 7 92221824 A C 1.1008 0.2371
#2: rs10000010 4 21227772 C T 0.9710 0.2693
#3: rs10000012 4 1347325 G C 1.0045 0.9087
#4: rs10000013 4 36901464 C A 1.0198 0.5379
答案 1 :(得分:1)
您可以rbind
data.frames然后找到重复项:
dx <- rbind(d1,d2)
dx[!(duplicated(dx)|rev(duplicated(dx[nrow(dx):1,]))),]
SNP CHR POS A1 A2 OR P
1 rs10 7 92221824 A C 1.1008 0.2371
3 rs10000010 4 21227772 C T 0.9710 0.2693
4 rs10000012 4 1347325 G C 1.0045 0.9087
5 rs10000013 4 36901464 C A 1.0198 0.5379
请注意,您必须向前和向后扫描以检测所有非唯一元素。
答案 2 :(得分:1)
要仅删除d1中与d2中的某些行完全匹配的行,而不使用data.table且不假设任何列是键,则必须将每行与每隔一行进行比较,例如: / p>
d1[sapply(seq(nrow(d1)), function(i) all(sapply(seq(nrow(d2)), function(j) any(d1[i,]!=d2[j,])))),]
所以我建议先设置一个键,特别是如果d1(或d2)很大,请按照Roland的回答。
答案 3 :(得分:0)
mydata<-mtcars
mydata1<-mydata[1:10,1:4]
mydata2<-mydata[4:15,1:4]
mydata1[!(mydata1$mpg %in% mydata2$mpg & mydata1$cyl %in% mydata2$cyl & mydata1$disp %in% mydata2$disp & mydata1$hp %in% mydata2$hp) ,]
mpg cyl disp hp
Mazda RX4 21.0 6 160 110
Mazda RX4 Wag 21.0 6 160 110
Datsun 710 22.8 4 108 93