una reorganizar por ordenar mover matriz funciones funcion filtros datos data con columnas columna agrupar r data.table multiple-columns indices

reorganizar - ordenar un data frame en r por una columna



Aplique una función a un subconjunto de columnas data.table, por columnas-índices en lugar de nombre (1)

Intento aplicar una función a un grupo de columnas en una tabla de datos grande sin referirme a cada una individualmente.

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

con el MWE arriba, esto:

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

funciona, pero esto:

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

no funciona ¿Cuál es la forma correcta de aplicar la función as.numeric a solo las columnas 2 y 3 de a sin referirse a ellas individualmente?

(En el conjunto de datos reales hay decenas de columnas, por lo que no sería práctico)


El enfoque idiomático es usar .SD y .SDcols

Puede forzar que se evalúe el RHS en el marco principal envolviendo ()

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

Para columnas 2: 3.

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

o

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