0

このような大きなデータセット(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

ここで、d2 の情報を持つ d1 のすべての日付セット情報を削除したいと考えています。結果は次のようになります。

         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

このWebで検索して、これに対処する同様の方法を見つけようとしましたが、答えが見つかりませんでした。誰かが私を助けてくれることを願っています。どうもありがとう。

4

4 に答える 4

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
于 2013-09-02T13:25:15.767 に答える
1

data.table を使用せず、列がキーであると想定せずに、d2 の一部の行と完全に一致する d1 の行のみを削除するには、次のように、すべての行を他のすべての行と比較する必要があります。

d1[sapply(seq(nrow(d1)), function(i) all(sapply(seq(nrow(d2)), function(j) any(d1[i,]!=d2[j,])))),]

したがって、特に d1 (または d2) が大きい場合は、最初にキーを設定し、Roland の回答に従うことをお勧めします。

于 2013-09-02T23:53:34.173 に答える
1

rbinddata.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

一意でない要素をすべて検出するには、前後にスキャンする必要があることに注意してください。

于 2013-09-02T13:32:47.487 に答える
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
于 2013-09-02T13:36:28.330 に答える