2013-05-28 5 views
28

Я пытаюсь применить функцию к группе столбцов в большой таблице данных, не обращаясь к каждой отдельно.R Datatable, применить функцию к подмножеству столбцов

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

с выше MWE, это:

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

работает, но это:

a[,b[2:3]:=data.table(as.numeric(b[2:3])),with=F] 

не работает. Каков правильный способ применения функции as.numeric только к столбцам 2 и 3 от a без ссылки на них отдельно.

(В фактических данных устанавливается есть десятки колонн, так что было бы непрактично)

Благодаря

ответ

40

идиоматические подход заключается в использовании .SD и .SDcols

Вы можете заставить RHS быть оценивали в родительском кадре, с обертыванием ()

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

Для столбцов 2: 3

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

или

mysubset <- 2:3 
a[, (mysubset) := lapply(.SD, as.numeric), .SDcols = mysubset] 
+0

Если вы хотите использовать «по» группировка здесь же, которые должны быть включены заранее, в 'mysubset'? –

+1

@TrevorAlexander - Нет, столбцы By не находятся в '.SD', они существуют как отдельные значения в среде, в которой создается' .SD'. – mnel

+0

Привет, как это использовать, если я хочу применить функцию ко всем столбцам, но «b»? Благодаря! – Christa

Смежные вопросы