0

私はRに完全に慣れていないので、これについて助けていただければ幸いです。2つの大きなデータフレームを比較しようとしています(最初の数行のみ):

d1

LOC.ID
LOC_O1
LOC_O34
LOC_O36
LOC_O78
LOC_O234
LOC_O235
LOC_O2353.1

..。

d2

locus.V.6   V6..model   start   end
LOC_O1      LOC_O1.1    1903    9817
LOC_O234    LOC_O234.1  1903    9817
LOC_O24     LOC_O24.2   10218   11435
LOC_O459    LOC_O459.1  11648   14915
LOC_O34     LOC_O34.2   15292   19323
LOC_O44     LOC_O44.1   15292   1932

とにかく、d1の1列目の値をd2の1列目と2列目の値と比較したいのですが、d2の1列目または2列目に一致するものがある場合は、その行のすべてのd2データを出力します。

if ... thenステートメントまたはループの使用方法がまだわかりません。または、これは比較的単純なはずです。どんな助けでもいただければ幸いです。ありがとう!

4

2 に答える 2

4

と一緒に使用data.tableskeysます。

高速なサブセット、高速なグループ化、高速な更新、高速な順序付けされた結合、およびリスト列を短く柔軟な構文で提供し、開発を高速化します。これは、RのA [B]構文に触発されています。ここで、Aは行列で、Bは2列の行列です。

と列を一致させたいと仮定しLOC.IDますlocus.V.6

library(data.table)
d1 <- data.table(d1, key = 'LOC.ID')
d2 <- data.table(d2, key = 'locus.V.6')
# nomatch = 0 means non-matches will not be returned
# mult = 'first' or 'last' may also be useful, if you only want these
d2[d1, nomatch=0]

   locus.V.6  V6..model start   end
1:    LOC_O1   LOC_O1.1  1903  9817
2:  LOC_O234 LOC_O234.1  1903  9817
3:   LOC_O34  LOC_O34.2 15292 19323


# the default value for `nomatch` is NA (just like when you use the function match)
# this now has NA values for non-matching rows
d2[d1] 
     locus.V.6  V6..model start   end
1:      LOC_O1   LOC_O1.1  1903  9817
2:    LOC_O234 LOC_O234.1  1903  9817
3:    LOC_O235         NA    NA    NA
4: LOC_O2353.1         NA    NA    NA
5:     LOC_O34  LOC_O34.2 15292 19323
6:     LOC_O36         NA    NA    NA
7:     LOC_O78         NA    NA    NA
于 2013-03-25T22:29:39.480 に答える
1

あなたはこれを試すことができます

match <- d2[,1] %in% d1[,1] | d2[,2] %in% d1[,1]
d2[index,]

d1[,x]データフレームのx-番目の列ですd1x%in%yのどの要素xもにあるかどうかを確認しyます。したがって、最初にd1[,1]、のいずれかd2[,1]の行またはにある行を確認してd2[,2]から、それらを表示します。

于 2013-03-25T22:01:05.810 に答える