<div>
                    Hi everybody, 
                </div><div>Regarding FR #5072 here: <a href="https://r-forge.r-project.org/tracker/index.php?func=detail&aid=5072&group_id=240&atid=975">https://r-forge.r-project.org/tracker/index.php?func=detail&aid=5072&group_id=240&atid=975</a></div><div><br></div><div>Let's take two data.tables X and Y with key set to one column, "V1". data.table currently deals with Y[X] differently when Y is a factor and 1) X is a factor and 2) X is not a factor. Let me illustrate this:</div><div><br></div><div>case 1:</div><div># X and Y are factors</div><div>require(data.table)</div><div>X <- data.table(V1=factor(c("A", "B", "C")))</div><div>Y <- data.table(V1=factor(c("B", "D", "E")), key="V1")</div><div><br></div><div>> Y[X] # X is a factor</div><div><div>  V1</div><div>1:  A</div><div>2:  B</div><div>3:  C</div></div><div><div>> Y[X]$V1</div><div>[1] A B C</div><div>Levels: A B C</div></div>
                <div><div><br></div><div>** Note that when both X and Y are factors, only the levels of X are in the join'd result (no D/E).</div><div><br></div><div><div>case 2:</div><div># X is **not** a factor</div><div>require(data.table)</div><div>X <- data.table(V1=c("A", "B", "C"))</div><div>Y <- data.table(V1=factor(c("B", "D", "E")), key="V1")</div></div><div><div>> Y[X] # x is not a factor</div><div>   V1</div><div>1: NA</div><div>2:  B</div><div>3: NA</div></div><div><br></div><div><div>> Y[X]$V1</div><div>[1] <NA> B    <NA></div><div>Levels: B D E</div></div><div><br></div><div>** Note that the results have "NA" in them as the join is concerned with retaining levels from "Y".</div><div><br></div><div>The first question is: Why this difference? Should there be a difference between when X is or is not a factor? What do you guys think should be the intended result?</div><div><br></div><div>The side-effect comes during "merge" as it internally uses this principle (and hence FR #5072). For example:</div><div><br></div><div>merge(X, Y, by="V1", all=TRUE)</div><div><div>   V1</div><div>1: NA</div><div>2: NA</div><div>3:  B</div><div>4:  D</div><div>5:  E</div></div><div><br></div><div><div>> merge(X, Y, by="V1", all=TRUE)$V1</div><div>[1] <NA> <NA> B    D    E</div><div>Levels: B D E</div></div><div><br></div><div>The second question is: Is this intended result?</div><div><br></div><div>Arun</div><div><br></div></div>