ver vacio studio seleccionar nombres matrices listas filas eliminar crear columnas r columnname rowname

vacio - Nombres de fila y columna en R



seleccionar filas en r (4)

¿Los siguientes pares de funciones generan exactamente los mismos resultados?

Par 1) names() y colnames()

Par 2) rownames() y row.names()


Creo que usar colnames y rownames tiene más sentido; este es el por qué.

Usar names tiene varias desventajas. Debes recordar que significa "nombres de columna", y solo funciona con el marco de datos, por lo que tendrás que llamar a los colnames siempre que uses matrices. Al invocar colnames , solo debe recordar una función. Finalmente, si observa el código para colnames , verá que llama names en el caso de un marco de datos de todos modos, por lo que el resultado es idéntico.

rownames y row.names devuelven los mismos valores para marco de datos y matrices; la única diferencia que he detectado es que cuando no hay nombres, rownames imprimirá "NULL" (como lo hace colnames ), pero row.names devuelve de manera invisible. Como no hay mucho para elegir entre las dos funciones, rownames gana por razones estéticas, ya que colnames más bellamente con colnames . (Además, para el programador perezoso, guarda un carácter de mecanografía).


Solo para expandir un poco en el ejemplo de Dirk:

Ayuda a pensar en un marco de datos como una lista con vectores de igual longitud. Probablemente sea por eso que los names funcionan con un marco de datos pero no una matriz.

La otra función útil es dimnames que devuelve los nombres para cada dimensión. Notarás que la función de rownames realidad solo devuelve el primer elemento de dimnames .

En cuanto a rownames y row.names : no puedo decir la diferencia, aunque rownames usa dimnames mientras row.names se escribió fuera de R. También parece que ambos funcionan con matrices de mayor dimensión:

>a <- array(1:5, 1:4) > a[1,,,] > rownames(a) <- "a" > row.names(a) [1] "a" > a , , 1, 1 [,1] [,2] a 1 2 > dimnames(a) [[1]] [1] "a" [[2]] NULL [[3]] NULL [[4]] NULL


Y otra expansión:

# create dummy matrix set.seed(10) m <- matrix(round(runif(25, 1, 5)), 5) d <- as.data.frame(m)

Si desea asignar nuevos nombres de columna, puede hacer lo siguiente en data.frame :

# an identical effect can be achieved with colnames() names(d) <- LETTERS[1:5] > d A B C D E 1 3 2 4 3 4 2 2 2 3 1 3 3 3 2 1 2 4 4 4 3 3 3 2 5 1 3 2 4 3

Si, sin embargo, ejecuta el comando anterior en la matrix , lo arruinará todo:

names(m) <- LETTERS[1:5] > m [,1] [,2] [,3] [,4] [,5] [1,] 3 2 4 3 4 [2,] 2 2 3 1 3 [3,] 3 2 1 2 4 [4,] 4 3 3 3 2 [5,] 1 3 2 4 3 attr(,"names") [1] "A" "B" "C" "D" "E" NA NA NA NA NA NA NA NA NA NA NA NA NA NA [20] NA NA NA NA NA NA

Dado que la matriz se puede considerar como un vector bidimensional, asignará nombres solo a los primeros cinco valores (no desea hacer eso, ¿verdad?). En este caso, debe seguir con colnames() .

Por lo tanto, allí...


Como dijo Oscar Wilde

La consistencia es el último refugio de los que no son imaginativos.

R es más un lenguaje evolucionado que diseñado, por lo que estas cosas suceden. names() y colnames() funcionan en un data.frame pero names() no funciona en una matriz:

R> DF <- data.frame(foo=1:3, bar=LETTERS[1:3]) R> names(DF) [1] "foo" "bar" R> colnames(DF) [1] "foo" "bar" R> M <- matrix(1:9, ncol=3, dimnames=list(1:3, c("alpha","beta","gamma"))) R> names(M) NULL R> colnames(M) [1] "alpha" "beta" "gamma" R>