0
votes
DF = data.frame(x=rep(c("a","b","c"),each=3), y=c(1,3,6), v=1:9)
DT = data.table(x=rep(c("a","b","c"),each=3), y=c(1,3,6), v=1:9)

When I write DF[2,3],it shows 2 because that is row 2, col 3. But as for DT[2,3], it shows 3? I would like to know how this value 3 is arrived at, and if I want row 2 col 3. What should I do?

1
This is covered in the very first FAQ.nrussell

1 Answers

2
votes

This is a common source of confusion in data.table. the second j argument in [.data.table is "evaluated within the frame of the data.table; i.e., it sees column names as if they are variables", so the 3 that you got unexpectedly is the result of evaluating the value 3 that you passed.

you can access the 3rd column by name

DT[2,v]

or by index if you specify with=FALSE

DT[2,3, with=FALSE]

Type ?data.table at the command line to see the help page for this