Zastosuj funkcję do podzbioru danych.kolumny tabeli, według kolumn-indeksy zamiast nazwy

Próbuję zastosować funkcję do grupy kolumn w dużych danych.tabela bez odwoływania się do każdego z osobna.

a <- data.table(
  a=as.character(rnorm(5)),
  b=as.character(rnorm(5)),
  c=as.character(rnorm(5)),
  d=as.character(rnorm(5))
)
b <- c('a','b','c','d')

Z MWE powyżej, to:

a[,b=as.numeric(b),with=F]

Działa, ale to:

a[,b[2:3]:=data.table(as.numeric(b[2:3])),with=F]
Nie działa. Jaki jest prawidłowy sposób zastosowania funkcji as.numeric do kolumn 2 i 3 z a bez odwoływania się do nich indywidualnie.

(w rzeczywistym zbiorze danych są dziesiątki kolumn, więc byłoby to niepraktyczne)

Author: smci, 2013-05-28

1 answers

Podejście idiomatyczne polega na wykorzystaniu .SD i .SDcols

Można wymusić ocenę RHS w ramce nadrzędnej, zawijając w ()

a[, (b) := lapply(.SD, as.numeric), .SDcols = b]

Dla kolumn 2: 3

a[, 2:3 := lapply(.SD, as.numeric), .SDcols = 2:3]

Lub

mysubset <- 2:3
a[, (mysubset) := lapply(.SD, as.numeric), .SDcols = mysubset]
 42
Author: mnel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-28 04:22:31