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
r
|data.table
So lets say I have the following data.frame
s:
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.table
s:
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