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)
30
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
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