我对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的第1列中的值与d2的第1列和第2列中的值进行比较,然后如果d2的第1列或第2列中存在匹配,则打印所有d2数据在那一行。
我不知道如何使用if ... then语句或循环,或者这应该相对简单。任何帮助,将不胜感激。谢谢!
答案 0 :(得分:3)
将data.tables
与keys
一起使用。
它以简短灵活的语法提供快速子集,快速分组,快速更新,快速排序的连接和列表列,以加快开发速度。它的灵感来自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
答案 1 :(得分:1)
你可以试试这个
match <- d2[,1] %in% d1[,1] | d2[,2] %in% d1[,1]
d2[index,]
d1[,x]
是数据框x
的第d1
列。 x%in%y
检查x
中的哪些元素也在y
中。首先,我们首先检查d1[,1]
中d2[,1]
或d2[,2]
中的哪些行,然后显示这些行。