Dear R experts,

I have the following data.table:

dt<- data.table(A=rep(1:5), B=c(20:24), C=rep(30:34), target.name=c("A","B",
"C","B","A"), target.column=c(1,2,3,2,1), target.value=rep(NA,5))

Columns A, B and C are the variables of interest.
For each row, I want to get the value of the variable given in the column
target.column. For example, in the second row, I want to get the value B.
(the column target.column just gives the corresponding column index).

I plan to store the results in the column target value.

#### Solution 1: very slow

for (i in (1:5)){

dt$target.value[i]<- dt[i, c(dt[, target.column[i]]), with=FALSE]

}

dt


#### Solution 2: faster but still slow

df<- data.frame(dt)

aaa<- lapply(1:5, function(i) df[i, which(colnames(df)==df$target.name[i])])

aaa<- do.call("rbind",aaa)

df$target.value<- aaa
Not convenient on a big data frame because of rbind


#### Other tries:

dt[, c(dt$target.name), with=FALSE]

The solution appears on the diagonal term for some reason...


The original data.table is big (18 million rows), so time efficiency is a
primary concern.
Any advice is very welcome. Thanks for your help.

Aurelien

        [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to