Estructuras de datos (continuación)
data.frame
es la pieza fundamental de todo lo que queremos hacer cuando hacemos análisis de datos. Es útil pensarla como una matrix
que puede mantener columnas de diferentes tipos y que además contiene nombres para cada columna.
states <- data.frame("code" = c("CA", "NY", "NE", "AZ"),
"population" = c(38.8, 19.7, 2.1, 6.8),
"region" = c("West", "Northeast", "Midwest", "West"),
"landlock" = c(FALSE, FALSE, TRUE, TRUE))
Podemos acceder los elementos a través de índices del mismo modo que haríamos con una matrix
o podemos acceder a través de nombre:
states[, 3]
states[, "region"]
states$region
También podemos añadir variables:
states$spanish <- c(28.5, 15.7, NA, 19.5)
O podemos editar valores usando algunas de las herramientas que hemos visto hasta ahora:
states$population[states$code == "NE"] <- 1.8
Examinemos con un poco de detalle qué es lo que ha ocurrido en la linea anterior. states$code
extrae la columna code
de nuestros datos. states$code == "NE"
devuelve un vector lógico en el que solo la tercer observación tiene valor TRUE
. states$population[states$code == "NE"]
accede al valor del vector population
para Nebraska. Ahí asignaremos el valor 1.8.
La misma aproximación puede usarse para hacer selecciones de la base de datos:
states[states$population > 10,] # Precaución con la coma
subset(states, population > 10)
La transformación de variables es sencilla
states$spanish <- states$spanish * states$population/100 # Aunque podríamos haber usado una nueva variable
La base de datos también es útil para pensar acerca de ciertos tipos de variables. Pensad en la variable region
: es un vector de caracteres, pero querríamos considerarlo como una variable discreta en la que cada valor (un número) tendría asociada una etiqueta (el nombre de la región). Esta estructura se llama factor
en R
.
states$region <- factor(states$region)
states$region
levels(states$region)
Dependiendo de con quién habléis, pueden amarlos u odiarlos.
LS0tIAp0aXRsZTogIk1hbmlwdWxhY2nDs24gZGUgZGF0b3MgeSBJL08iCmRhdGU6ICJgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVCICVkLCAlWScpYCIKLS0tCgoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0UsIGNhY2hlPUZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQoZXZhbCA9IEZBTFNFKSAKYGBgCgojIyMgRXN0cnVjdHVyYXMgZGUgZGF0b3MgKGNvbnRpbnVhY2nDs24pCgpgZGF0YS5mcmFtZWAgZXMgbGEgcGllemEgZnVuZGFtZW50YWwgZGUgdG9kbyBsbyBxdWUgcXVlcmVtb3MgaGFjZXIgY3VhbmRvCmhhY2Vtb3MgYW7DoWxpc2lzIGRlIGRhdG9zLiBFcyDDunRpbCBwZW5zYXJsYSBjb21vIHVuYSBgbWF0cml4YCBxdWUgcHVlZGUgbWFudGVuZXIKY29sdW1uYXMgZGUgZGlmZXJlbnRlcyB0aXBvcyB5IHF1ZSBhZGVtw6FzIGNvbnRpZW5lIG5vbWJyZXMgcGFyYSBjYWRhIGNvbHVtbmEuCgpgYGB7ciBldmFsPUZBTFNFfQpzdGF0ZXMgPC0gZGF0YS5mcmFtZSgiY29kZSIgICAgICAgPSBjKCJDQSIsICJOWSIsICJORSIsICJBWiIpLCAKICAgICAgICAgICAgICAgICAgICAgInBvcHVsYXRpb24iID0gYygzOC44LCAxOS43LCAyLjEsIDYuOCksIAogICAgICAgICAgICAgICAgICAgICAicmVnaW9uIiAgICAgPSBjKCJXZXN0IiwgIk5vcnRoZWFzdCIsICJNaWR3ZXN0IiwgIldlc3QiKSwgCiAgICAgICAgICAgICAgICAgICAgICJsYW5kbG9jayIgICA9IGMoRkFMU0UsIEZBTFNFLCBUUlVFLCBUUlVFKSkKYGBgCgpQb2RlbW9zIGFjY2VkZXIgbG9zIGVsZW1lbnRvcyBhIHRyYXbDqXMgZGUgw61uZGljZXMgZGVsIG1pc21vIG1vZG8gcXVlIGhhcsOtYW1vcwpjb24gdW5hIGBtYXRyaXhgIG8gcG9kZW1vcyBhY2NlZGVyIGEgdHJhdsOpcyBkZSBub21icmU6CmBgYHtyIGV2YWw9RkFMU0V9CnN0YXRlc1ssIDNdIApzdGF0ZXNbLCAicmVnaW9uIl0Kc3RhdGVzJHJlZ2lvbgpgYGAKClRhbWJpw6luIHBvZGVtb3MgYcOxYWRpciB2YXJpYWJsZXM6CgpgYGB7ciBldmFsPUZBTFNFfQpzdGF0ZXMkc3BhbmlzaCA8LSBjKDI4LjUsIDE1LjcsIE5BLCAxOS41KQpgYGAKCk8gcG9kZW1vcyBlZGl0YXIgdmFsb3JlcyB1c2FuZG8gYWxndW5hcyBkZSBsYXMgaGVycmFtaWVudGFzIHF1ZSBoZW1vcyB2aXN0bwpoYXN0YSBhaG9yYToKCmBgYHtyIGV2YWw9RkFMU0V9CnN0YXRlcyRwb3B1bGF0aW9uW3N0YXRlcyRjb2RlID09ICJORSJdIDwtIDEuOApgYGAKCkV4YW1pbmVtb3MgY29uIHVuIHBvY28gZGUgZGV0YWxsZSBxdcOpIGVzIGxvIHF1ZSBoYSBvY3VycmlkbyBlbiBsYSBsaW5lYQphbnRlcmlvci4gYHN0YXRlcyRjb2RlYCBleHRyYWUgbGEgY29sdW1uYSBgY29kZWAgZGUgbnVlc3Ryb3MgZGF0b3MuIGBzdGF0ZXMkY29kZQo9PSAiTkUiYCBkZXZ1ZWx2ZSB1biB2ZWN0b3IgbMOzZ2ljbyBlbiBlbCBxdWUgc29sbyBsYSB0ZXJjZXIgb2JzZXJ2YWNpw7NuIHRpZW5lCnZhbG9yIGBUUlVFYC4gYHN0YXRlcyRwb3B1bGF0aW9uW3N0YXRlcyRjb2RlID09ICJORSJdYCBhY2NlZGUgYWwgdmFsb3IgZGVsCnZlY3RvciBgcG9wdWxhdGlvbmAgcGFyYSBOZWJyYXNrYS4gQWjDrSBhc2lnbmFyZW1vcyBlbCB2YWxvciAxLjguCgpMYSBtaXNtYSBhcHJveGltYWNpw7NuIHB1ZWRlIHVzYXJzZSBwYXJhIGhhY2VyIHNlbGVjY2lvbmVzIGRlIGxhIGJhc2UgZGUgZGF0b3M6CmBgYHtyIGV2YWw9RkFMU0V9CnN0YXRlc1tzdGF0ZXMkcG9wdWxhdGlvbiA+IDEwLF0gIyBQcmVjYXVjacOzbiBjb24gbGEgY29tYQpzdWJzZXQoc3RhdGVzLCBwb3B1bGF0aW9uID4gMTApCmBgYAoKTGEgdHJhbnNmb3JtYWNpw7NuIGRlIHZhcmlhYmxlcyBlcyBzZW5jaWxsYQpgYGB7ciBldmFsPUZBTFNFfQpzdGF0ZXMkc3BhbmlzaCA8LSBzdGF0ZXMkc3BhbmlzaCAqIHN0YXRlcyRwb3B1bGF0aW9uLzEwMCAjIEF1bnF1ZSBwb2Ryw61hbW9zIGhhYmVyIHVzYWRvIHVuYSBudWV2YSB2YXJpYWJsZQpgYGAKCkxhIGJhc2UgZGUgZGF0b3MgdGFtYmnDqW4gZXMgw7p0aWwgcGFyYSBwZW5zYXIgYWNlcmNhIGRlIGNpZXJ0b3MgdGlwb3MgZGUKdmFyaWFibGVzLiBQZW5zYWQgZW4gbGEgdmFyaWFibGUgYHJlZ2lvbmA6IGVzIHVuIHZlY3RvciBkZSBjYXJhY3RlcmVzLCBwZXJvCnF1ZXJyw61hbW9zIGNvbnNpZGVyYXJsbyBjb21vIHVuYSB2YXJpYWJsZSBkaXNjcmV0YSBlbiBsYSBxdWUgY2FkYSB2YWxvciAodW4KbsO6bWVybykgdGVuZHLDrWEgYXNvY2lhZGEgdW5hIGV0aXF1ZXRhIChlbCBub21icmUgZGUgbGEgcmVnacOzbikuIEVzdGEgZXN0cnVjdHVyYQpzZSBsbGFtYSBgZmFjdG9yYCBlbiBgUmAuCgpgYGB7ciBldmFsPUZBTFNFfQpzdGF0ZXMkcmVnaW9uIDwtIGZhY3RvcihzdGF0ZXMkcmVnaW9uKQpzdGF0ZXMkcmVnaW9uCmxldmVscyhzdGF0ZXMkcmVnaW9uKQpgYGAKCkRlcGVuZGllbmRvIGRlIGNvbiBxdWnDqW4gaGFibMOpaXMsIHB1ZWRlbiBhbWFybG9zIHUgb2RpYXJsb3MuCgojIyMgSW5wdXQvT3V0cHV0CgpQb2RlbW9zIGVzY3JpYmlyIGVuIGVsIGRpc2NvIGNvbiB2YWxvcmVzIHNlcGFyYWRvcyBwb3IgY29tYXMgdXNhbmRvIGxhIGZ1bmNpw7NuIGB3cml0ZS5jc3ZgLgoKYGBge3IgZXZhbD1GQUxTRX0Kd3JpdGUuY3N2KHN0YXRlcywgZmlsZT0ic3RhdGVzLmNzdiIpCmBgYAoKRWwgYXJndW1lbnRvIGBmaWxlYCBub3MgcGVybWl0ZSBlc3BlY2lmaWNhciBlbCBub21icmUgZWwgYXJjaGl2byBlbiBlbCBxdWUKZ3VhcmRhcmVtb3MgZWwgYGRhdGEuZnJhbWVgIGBzdGF0ZXNgLiBFbCBhcmNoaXZvIHNlIGd1YXJkYSBlbiBlbCBkaXJlY3RvcmlvIGVuCmVsIHF1ZSBlc3RlbW9zIHRyYWJhamFuZG8sIHBlcm8gcG9kcsOtYW1vcyBoYWJlciBlc3BlY2lmaWNhZG8gY3VhbHF1aWVyIG90cm8KZGlyZWN0b3JpbyBzaSBodWJpw6lzZW1vcyBwYXNhZG8gbGEgcnV0YSBjb21wbGV0YS4gUGFyYSBjb21wcm9iYXIgY3XDoWwgZXMgZWwKZGlyZWN0b3JpbyBkZSB0cmFiYWpvIHBvZGVtb3MgdXNhcjoKCmBgYHtyfQpnZXR3ZCgpCmBgYAp5IHBvZGVtb3MgY2FtYmlhciBlbCB2YWxvciB1c2FuZG8gYHNldHdkKClgLiAKClBhcmEgbGVlciBkYXRvcyBhIGBSYCBwb2RlbW9zIHVzYXIgbGEgZnVuY2nDs24gYHJlYWQuY3N2YC4KYGBge3IgZXZhbD1GQUxTRX0Kc3RhdGVzIDwtIHJlYWQuY3N2KCJzdGF0ZXMuY3N2IikKc3RhdGVzCmBgYAoKRWwgZm9ybWF0byBtw6FzIGNvbcO6biBwYXJhIGBSYCBkZSB0b2RvcyBtb2RvcyBlcyBzdSBmb3JtYXRvIGJpbmFyaW8gbmF0aXZvLCBxdWUKdXNhIGxhIGV4dGVuc2nDs24gYC5SRGF0YWAgeSBxdWUgc2UgZ2VuZXJhIHkgbGVlIHVzYW5kbyBsYXMgZnVuY2lvbmVzCmBzYXZlYCB5IGBsb2FkYC4KCmBgYHtyIGV2YWw9RkFMU0V9CnNhdmUoc3RhdGVzLCBmaWxlPSJzdGF0ZXMuUkRhdGEiKQpsb2FkKCJzdGF0ZXMuUkRhdGEiKQpzdGF0ZXMKYGBgCgpQZXJvIGBSYCBwdWVkZSBsZWVyICh5IGEgdmVjZXMgZXNjcmliaXIpIGRhdG9zIGVuIG90cm9zIGZvcm1hdG9zIGJpbmFyaW9zIGNvbW8KU3RhdGEsIFNBUywgU1BTUywgbyBpbmNsdXNvIEV4Y2VsLiBMYXMgZnVuY2lvbmVzIHBhcmEgZ2VzdGlvbmFyIGVzdG9zIGZvcm1hdG9zCnZpZW5lbiBlbiBlbCBwYXF1ZXRlIGBmb3JlaWduYCBxdWUgc2UgaW5zdGFsYSBjb24gYFJgLiBFY2hhZCB1biB2aXN0YXpvIGEgCltsYQpkb2N1bWVudGFjacOzbl0oaHR0cHM6Ly9jcmFuLnItcHJvamVjdC5vcmcvd2ViL3BhY2thZ2VzL2ZvcmVpZ24vaW5kZXguaHRtbCkuIEVuCmJyZXZlIHZlcmVtb3MgY8OzbW8gdXNhciBwYXF1ZXRlcyBhZGljaW9uYWxlcyBlbnNlZ3VpZGEuCg==