yla tres traductores traducir traduccion tecnica reglas para onu online introduccion internet ingles idioma herramientas guia estilo español diccionarios ciencia castellano r matrix dataframe plyr reshape

tres - reglas de traduccion ingles español



Reformar el marco de datos de tres columnas a la matriz(formato "largo" a "ancho") (2)

Hay muchas maneras de hacer esto. Esta respuesta comienza con mis formas favoritas, pero también recopila varias formas de respuestas a preguntas similares diseminadas por este sitio.

tmp <- data.frame(x=gl(2,3, labels=letters[24:25]), y=gl(3,1,6, labels=letters[1:3]), z=c(1,2,3,3,3,2))

Usando reshape2:

library(reshape2) acast(tmp, x~y, value.var="z")

Usando la indexación matricial:

with(tmp, { out <- matrix(nrow=nlevels(x), ncol=nlevels(y), dimnames=list(levels(x), levels(y))) out[cbind(x, y)] <- z out })

Usando xtabs :

xtabs(z~x+y, data=tmp)

También puede usar reshape , como se sugiere aquí: Convierta la tabla en matriz por nombres de columna , aunque luego debe realizar una pequeña manipulación para eliminar columnas adicionales y obtener los nombres correctos (no se muestran).

> reshape(tmp, idvar="x", timevar="y", direction="wide") x z.a z.b z.c 1 x 1 2 3 4 y 3 3 2

También hay sparseMatrix dentro del paquete Matrix , como se ve aquí: R - convierte la tabla BIG en matriz por nombres de columna

> with(tmp, sparseMatrix(i = as.numeric(x), j=as.numeric(y), x=z, + dimnames=list(levels(x), levels(y)))) 2 x 3 sparse Matrix of class "dgCMatrix" a b c x 1 2 3 y 3 3 2

La función de plyr biblioteca plyr también podría ser utilizada, como aquí: https://stackoverflow.com/a/7020101/210673

> library(plyr) > daply(tmp, .(x, y), function(x) x$z) y x a b c x 1 2 3 y 3 3 2

dcast de reshape2 también funciona, como aquí: Cambie la forma de los datos para los valores en una columna , pero obtendrá un data.frame con una columna para el valor de x .

> dcast(tmp, x~y, value.var="z") x a b c 1 x 1 2 3 2 y 3 3 2

Del mismo modo, la spread de "tidyr" también funcionaría para tal transformación:

library(tidyr) spread(tmp, y, z) # x a b c # 1 x 1 2 3 # 2 y 3 3 2

Tengo un data.frame que se ve así.

x a 1 x b 2 x c 3 y a 3 y b 3 y c 2

Quiero esto en forma de matriz para poder alimentarlo a un mapa de calor para hacer una trama. El resultado debería ser algo así como:

a b c x 1 2 3 y 3 3 2

He intentado cast desde el paquete de remodelación y he intentado escribir una función manual para hacer esto, pero parece que no puedo hacerlo bien.


La pregunta tiene algunos años, pero tal vez algunas personas todavía estén interesadas en respuestas alternativas.

Si no desea cargar ningún paquete, puede usar esta función:

#'' Converts three columns of a data.frame into a matrix -- e.g. to plot #'' the data via image() later on. Two of the columns form the row and #'' col dimensions of the matrix. The third column provides values for #'' the matrix. #'' #'' @param data data.frame: input data #'' @param rowtitle string: row-dimension; name of the column in data, which distinct values should be used as row names in the output matrix #'' @param coltitle string: col-dimension; name of the column in data, which distinct values should be used as column names in the output matrix #'' @param datatitle string: name of the column in data, which values should be filled into the output matrix #'' @param rowdecreasing logical: should the row names be in ascending (FALSE) or in descending (TRUE) order? #'' @param coldecreasing logical: should the col names be in ascending (FALSE) or in descending (TRUE) order? #'' @param default_value numeric: default value of matrix entries if no value exists in data.frame for the entries #'' @return matrix: matrix containing values of data[[datatitle]] with rownames data[[rowtitle]] and colnames data[coltitle] #'' @author Daniel Neumann #'' @date 2017-08-29 data.frame2matrix = function(data, rowtitle, coltitle, datatitle, rowdecreasing = FALSE, coldecreasing = FALSE, default_value = NA) { # check, whether titles exist as columns names in the data.frame data if ( (!(rowtitle%in%names(data))) || (!(coltitle%in%names(data))) || (!(datatitle%in%names(data))) ) { stop(''data.frame2matrix: bad row-, col-, or datatitle.'') } # get number of rows in data ndata = dim(data)[1] # extract rownames and colnames for the matrix from the data.frame rownames = sort(unique(data[[rowtitle]]), decreasing = rowdecreasing) nrows = length(rownames) colnames = sort(unique(data[[coltitle]]), decreasing = coldecreasing) ncols = length(colnames) # initialize the matrix out_matrix = matrix(NA, nrow = nrows, ncol = ncols, dimnames=list(rownames, colnames)) # iterate rows of data for (i1 in 1:ndata) { # get matrix-row and matrix-column indices for the current data-row iR = which(rownames==data[[rowtitle]][i1]) iC = which(colnames==data[[coltitle]][i1]) # throw an error if the matrix entry (iR,iC) is already filled. if (!is.na(out_matrix[iR, iC])) stop(''data.frame2matrix: double entry in data.frame'') out_matrix[iR, iC] = data[[datatitle]][i1] } # set empty matrix entries to the default value out_matrix[is.na(out_matrix)] = default_value # return matrix return(out_matrix) }

Cómo funciona:

myData = as.data.frame(list(''dim1''=c(''x'', ''x'', ''x'', ''y'',''y'',''y''), ''dim2''=c(''a'',''b'',''c'',''a'',''b'',''c''), ''values''=c(1,2,3,3,3,2))) myMatrix = data.frame2matrix(myData, ''dim1'', ''dim2'', ''values'') myMatrix > a b c > x 1 2 3 > y 3 3 2