0

我对 R 完全陌生,希望能得到一些帮助!我正在尝试比较两个大型数据框(仅前几行):

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 的第一列中的值与 d2 的第一列和第二列中的值进行比较,然后如果 d2 的第一列或第二列中存在匹配项,则打印该行中的所有 d2 数据.

我还不知道如何使用 if...then 语句或循环,或者这应该相对简单。任何帮助,将不胜感激。谢谢!

4

2 回答 2

4

data.tables与 一起使用keys

它以简短灵活的语法提供快速子集、快速分组、快速更新、快速排序连接和列表列,以加快开发速度。它受到 R 中 A[B] 语法的启发,其中 A 是矩阵,B 是 2 列矩阵

假设您要匹配LOC.IDlocus.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]xdataframe 的第 - 列d1x%in%y检查 in 中的哪些元素x也在y. 因此,首先我们检查 in 中的哪些行在d1[,1]anyd2[,1]或 in 中d2[,2],然后显示这些行。

于 2013-03-25T22:01:05.810 回答