LeGeniusII
LeGeniusII

Reputation: 960

R compare data.table elements by elements

Have two data.tables:

> aDT <- data.table(colA = "apple", colB = "banana", colC = "4")
> aDT
    colA   colB colC
1: apple banana    4


> bDT <- data.table(colA = c("purple","apple"), colB = c("pear","banana"), colC = c("4","2"))
> bDT
     colA   colB colC
1: purple   pear    4
2:  apple banana    2

I would like to compare the only row in aDT with every row in bDT, element by element. The resulting data.table looks like:

> resultDT <- data.table(colA = c(FALSE,TRUE), colB = c(FALSE,TRUE), colC = c(TRUE,FALSE))
> resultDT
    colA  colB  colC
1: FALSE FALSE  TRUE
2:  TRUE  TRUE FALSE

How to achieve it?

Upvotes: 2

Views: 1064

Answers (2)

akrun
akrun

Reputation: 887991

Another option is Map to compare the corresponding columns of both dataset

aDT[, Map(`==`, .SD, bDT)]
#   colA  colB  colC
#1: FALSE FALSE  TRUE
#2:  TRUE  TRUE FALSE

Upvotes: 0

Gregor Thomas
Gregor Thomas

Reputation: 146249

aDT[rep(1, nrow(bDT))] == bDT
#       colA  colB  colC
# [1,] FALSE FALSE  TRUE
# [2,]  TRUE  TRUE FALSE

Upvotes: 1

Related Questions