replacing data.frame element-wise operations with data.table (that used rowname)

Posted by Harold on Stack Overflow See other posts from Stack Overflow or by Harold
Published on 2014-08-22T16:16:00Z Indexed on 2014/08/22 16:20 UTC
Read the original article Hit count: 207

Filed under:
|

So lets say I have the following data.frames:

df1 <- data.frame(y = 1:10, z = rnorm(10), row.names = letters[1:10])
df2 <- data.frame(y = c(rep(2, 5), rep(5, 5)), z = rnorm(10),
    row.names = letters[1:10]) 

And perhaps the "equivalent" data.tables:

dt1 <- data.table(x = rownames(df1), df1, key = 'x')
dt2 <- data.table(x = rownames(df2), df2, key = 'x')

If I want to do element-wise operations between df1 and df2, they look something like

dfRes <- df1 / df2

And rownames() is preserved:

R> head(dfRes)
    y          z
a 0.5  3.1405463
b 1.0  1.2925200
c 1.5  1.4137930
d 2.0 -0.5532855
e 2.5 -0.0998303
f 1.2 -1.6236294

My poor understanding of data.table says the same operation should look like this:

dtRes <- dt1[, !'x', with = F] / dt2[, !'x', with = F]
dtRes[, x := dt1[,x,]]
setkey(dtRes, x)

(setkey optional)

Is there a more data.table-esque way of doing this?

As a slightly related aside, more generally, I would have other columns such as factors in each data.table and I would like to omit those columns while doing the element-wise operations, but still have them in the result. Does this make sense?

Thanks!

© Stack Overflow or respective owner

Related posts about r

    Related posts about data.table