dynamic - Dynamically setting the name label of a dynamically selected column in R data.table -


is there way dynamically set name of column (or multiple columns more generally) when subsetting data.table, selecting original columns dynamically?

note not trying assign new column original data.table in case.

x <- data.table(a = 1:10, b = letters[1:10])  colname <- "b" newcolname <- "var"  # name of column dymamically selected ugly 'v2' x[a > 7, list(a, get(colvar))] #      v2 # 1:  8  h # 2:  9  # 3: 10  j    # want provide new name of column dynamically, don't know how this.   # doesn't work, demonstrates spirit of want achieve: x[a > 7, list(a, (newcolname) = get(colvar))] 

i want achieve this, in data.table 1 liner:

#     var # 1:  8  h # 2:  9  # 3: 10  j 

given 2 answers, decided set best answer fastest approach:

> microbenchmark(setnames(x[a > 7, .(a, .sd), .sdcols = colname], 2, newcolname)[], + x[a > 7, setnames(list(a, get(colname)), c("a", newcolname))]) unit: microseconds                                                               expr     min       lq      mean    median        uq      max neval cld  setnames(x[a > 7, .(a, .sd), .sdcols = colname], 2, newcolname)[] 974.519 1003.993 1063.5964 1031.4020 1133.5330 1428.975   100   b      x[a > 7, setnames(list(a, get(colname)), c("a", newcolname))] 402.693  436.531  485.8323  453.9695  493.3325 1752.296   100   

just set names of list dynamically

x[a > 5, setnames(list(a, get(colname)), c("a", newcolname))] 

the setnames() function allows name elements of list.


Comments

Popular posts from this blog

inversion of control - Autofac named registration constructor injection -

verilog - Systemverilog dynamic casting issues -

ios - Change Storyboard View using Seague -