Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Update an entire row in data.table in R

Tags:

r

data.table

I have a data.table object in R that has 9,000 columns. My code calculates new values for all 9,000 columns at once and returns a vector of values. I'd like to just replace the row in the data.table with all the values at once. In a dataFrame object this is easy. However, I can't figure out how to get that working in a data.table.

d <- data.table(q=c(1,2,3,4,5,6,7,8,9), x=rep(c("a","b","c"),each=3), y=c(1,3,6), v=1:9)
d[q==1, := c(5,5,5,5)] # FAILS
d[q==1, ] <- c(5,5,5,5) # FAILS

Any idea how to efficiently update the whole row at once?

like image 897
Noah Avatar asked Apr 15 '15 09:04

Noah


1 Answers

You could use names(d) for LHS, then use as.list in order to convert your vector to a list so data.table will understand that it need to assign each value to a different column instead all the values to each column.

You are also converting character vector to numeric here (the x column), so data.table will return a warning in order to make sure you are aware of that.

vec <- c(5, 5, 5, 5)
d[q == 1L, names(d) := as.list(vec)][]
#    q x y v
# 1: 5 5 5 5
# 2: 2 a 3 2
# 3: 3 a 6 3
# 4: 4 b 1 4
# 5: 5 b 3 5
# 6: 6 b 6 6
# 7: 7 c 1 7
# 8: 8 c 3 8
# 9: 9 c 6 9
like image 148
David Arenburg Avatar answered Oct 07 '22 22:10

David Arenburg