miércoles, 4 de septiembre de 2013

Algunas operaciones basicas con R

Composicion de algunos analisis pasados

Composicion de algunos analisis pasados

Obtencion de data

Aqui usamos un lector de dato genérico, especialmente para los países en los que la coma se emplean como decimal. En estos países el csv separa los valores con punto y coma. Por tanto se usa cvs2. Igualmente se puede usar csv, pero entonces es necesario especificar cual es el separador de los datos y cual el separador de los decimales.

disponibilidad <- read.csv2("C:/Disponibilidad.csv", 
    header = T)

En R las tablas de datos se conoce como data.frame. las Columnas son variables; celdas, casos. Para ver los primeros datos de la tabla que hemos cargadon en la consola de R y tambien podemos emplear otras funciones para “ver” en la data. Algunas acciones generales son:

attach(cancer)  #si se quiere acceder a los nombres de las variables sin necesidad de indizar
detach(rgrs)  # saca los paquetes del espacio de trabajo

search()  # da informacion sobre que cosas estan cargadas en el espacio de trabajo
##  [1] ".GlobalEnv"        "package:knitr"     "package:stats"    
##  [4] "package:graphics"  "package:grDevices" "package:utils"    
##  [7] "package:datasets"  "package:methods"   "Autoloads"        
## [10] "package:base"

Ya a nivel de cada tabla podemos hacer una serie de analisis para, antes de comenzar a procesar la informacion, podemos observar que hay en la tabla

head(disponibilidad)
##   años calorias proteinas
## 1 1996     2267      60.4
## 2 1997     2163      59.6
## 3 1998     2202      64.9
## 4 1999     2127      61.8
## 5 2000     2254      66.4
## 6 2001     2361      68.1

# para obtener el tamaño de la data
names(disponibilidad)
## [1] "años"      "calorias"  "proteinas"
dim(disponibilidad)
## [1] 11  3
nrow(disponibilidad)
## [1] 11
ncol(disponibilidad)
## [1] 3

El data tiene tres columnas y once casos (filas). Las variables se denominan: años, calorias y proteinas. Y podemos obtener una relacion completa de filas y columnas usando la funcion dim(), u obtener una u otra, empleando las funciones nrow() y ncol()respectivamente. Estas funciones son de gran utilidad cuando trabajamos con data que no conocemos. Supongamos que hemos obtenido una base de datos denominada 'cancer' desde algun sitio web. Lo primero que hacemos con la data es justamente entender cuantos casos tenemos, y los nombres de las variables:

dim(cancer)
## [1] 191  14
names(cancer)
##  [1] "pais"        "cervica"     "colon.recto" "esofago"     "higado"     
##  [6] "leucemia"    "mama"        "oral"        "ovario"      "pancreas"   
## [11] "pulmon"      "vejiga"      "gdpcapita"   "region"

la data consta de 191 casos y de 14 variables, que son los diferentes tipos de cancer. Podemos tambien obtener informacion adicional de la data

class(disponibilidad)
## [1] "data.frame"
class(disponibilidad$año)
## [1] "integer"
class(cancer$cervica)
## [1] "numeric"

Podemos cambiar el tipo de variable asignado por R:

id$proteina <- as.factor(id$proteina)

Podemos obtener informacion completa sobre el data frame:

str(cancer)
## 'data.frame':    191 obs. of  14 variables:
##  $ pais       : Factor w/ 191 levels "afghanistan",..: 1 2 3 4 5 6 7 8 9 10 ...
##  $ cervica    : num  2.6 1.5 3.4 0.8 12.5 5.4 0 5.2 5.5 1 ...
##  $ colon.recto: num  6.5 7.1 8.5 14.3 3.5 13.6 5.1 17.1 12.7 13 ...
##  $ esofago    : num  9.7 2.4 0.5 2.5 4 4.6 1.9 4.8 1.4 3.9 ...
##  $ higado     : num  3.8 6.7 1.3 4.9 9.6 5.2 3.6 4.1 11.7 3.4 ...
##  $ leucemia   : num  5.3 5.7 2.9 3.8 1.8 4 2.8 4.4 5 5.1 ...
##  $ mama       : num  14.2 18.4 16.9 15.5 13 29.8 11 24.8 28 18.2 ...
##  $ oral       : num  2 4.6 3.5 2.9 3.6 2.7 2.1 2.3 2.6 2.2 ...
##  $ ovario     : num  1 1.6 1.7 1.9 1.8 8.5 1.5 2.6 3.1 2.5 ...
##  $ pancreas   : num  2.3 8.9 1.3 4.6 1.3 3.4 4 8.8 9.4 6.2 ...
##  $ pulmon     : num  7.2 31 10.6 21.6 2.3 8.3 7.4 21.8 39.3 23 ...
##  $ vejiga     : num  4.3 3.8 5 4.2 1.5 3.1 1.5 3.2 5.9 2.8 ...
##  $ gdpcapita  : Factor w/ 188 levels "1.098","1.114",..: 148 105 134 115 130 35 102 29 83 71 ...
##  $ region     : Factor w/ 9 levels "aao","asia","ca",..: 6 5 6 5 9 4 6 8 5 1 ...

# tambien podemos usar la funcion attributes()
attributes(cancer)  #mas completo que names
## $names
##  [1] "pais"        "cervica"     "colon.recto" "esofago"     "higado"     
##  [6] "leucemia"    "mama"        "oral"        "ovario"      "pancreas"   
## [11] "pulmon"      "vejiga"      "gdpcapita"   "region"     
## 
## $class
## [1] "data.frame"
## 
## $row.names
##   [1]   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17
##  [18]  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34
##  [35]  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51
##  [52]  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68
##  [69]  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85
##  [86]  86  87  88  89  90  91  92  93  94  95  96  97  98  99 100 101 102
## [103] 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
## [120] 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
## [137] 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
## [154] 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170
## [171] 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187
## [188] 188 189 190 191

# podemos obtener informacion sobre los niveles de una variable dada
levels(cancer$regiones)
## NULL

Para ordenar la data usamos la funcion sort() y podemos ademas ordenar de forma creciente o decreciente:

sort(cancer$cervica, decreasing = TRUE)
##   [1] 23.7 22.4 21.8 21.7 21.4 21.4 21.1 21.0 20.3 19.7 19.7 18.9 17.8 16.3
##  [15] 15.2 15.1 14.9 14.8 14.7 14.6 14.6 14.3 14.1 14.0 13.3 12.9 12.8 12.5
##  [29] 12.5 11.8 11.8 11.7 11.5 11.3 11.2 11.1 10.9 10.5 10.4 10.1  9.9  9.9
##  [43]  9.9  9.8  9.7  9.6  9.5  9.5  9.5  9.3  9.3  9.0  9.0  8.9  8.8  8.7
##  [57]  8.4  8.3  8.3  8.3  8.1  8.1  8.1  8.1  8.0  8.0  7.9  7.7  7.7  7.7
##  [71]  7.6  7.6  7.4  7.3  7.2  7.0  6.7  6.6  6.6  6.5  6.5  6.4  6.3  6.2
##  [85]  6.1  6.0  6.0  5.9  5.9  5.7  5.6  5.5  5.5  5.5  5.4  5.2  5.2  5.1
##  [99]  5.1  5.0  5.0  4.9  4.9  4.7  4.7  4.6  4.6  4.5  4.5  4.4  4.3  4.3
## [113]  4.1  4.0  4.0  4.0  4.0  3.8  3.5  3.5  3.4  3.4  3.4  3.4  3.2  3.1
## [127]  3.1  3.1  3.0  2.9  2.9  2.9  2.7  2.6  2.6  2.5  2.5  2.4  2.4  2.4
## [141]  2.3  2.3  2.3  2.1  2.1  2.0  1.9  1.8  1.8  1.6  1.6  1.6  1.5  1.5
## [155]  1.5  1.5  1.4  1.4  1.4  1.4  1.3  1.3  1.3  1.3  1.2  1.2  1.2  1.2
## [169]  1.1  1.1  1.1  1.1  1.0  1.0  1.0  1.0  1.0  1.0  0.9  0.9  0.8  0.8
## [183]  0.7  0.7  0.5  0.5  0.5  0.5  0.4  0.0  0.0

Las variables pueden renombrarse utilizando la funcion names(). Pero esta funcion requiere que se cambien todos los nombres. El paquete rgrs nos ofrece una funcion para cambiar el nombre de una sola variablel

require(rgrs)
## Loading required package: rgrs
names(cancer)  #notese que en la primera columna dice cervica, en lugar de cervical
##  [1] "pais"        "cervica"     "colon.recto" "esofago"     "higado"     
##  [6] "leucemia"    "mama"        "oral"        "ovario"      "pancreas"   
## [11] "pulmon"      "vejiga"      "gdpcapita"   "region"
cancer <- renomme.variable(cancer, "cervica", "cervical")
names(cancer)
##  [1] "pais"        "cervical"    "colon.recto" "esofago"     "higado"     
##  [6] "leucemia"    "mama"        "oral"        "ovario"      "pancreas"   
## [11] "pulmon"      "vejiga"      "gdpcapita"   "region"

Podemos acceder la tabla de datos,esto es indezar,

cancer[3, ]  #información de toda la fila 3
##      pais cervical colon.recto esofago higado leucemia mama oral ovario
## 3 algeria      3.4         8.5     0.5    1.3      2.9 16.9  3.5    1.7
##   pancreas pulmon vejiga gdpcapita region
## 3      1.3   10.6      5     5.523 menaga
cancer[, 1]  #ofrece toda la informacion de la columna 1
##   [1] afghanistan      albania          algeria          andorra         
##   [5] angola           antigua and bar. arab emirates    argentina       
##   [9] armenia          australia        austria          azerbaijan      
##  [13] bahamas          bahrain          bangladesh       barbados        
##  [17] belarus          belgium          belize           benin           
##  [21] bhutan           bolivia          bosnia/herzeg    botswana        
##  [25] brazil           brunei           bulgaria         burkina faso    
##  [29] burundi          cambodia         cameroon         canada          
##  [33] cape verde       central africa   chad             chile           
##  [37] china            colombia         comoros          congo           
##  [41] cook islands     costa rica       cote d ivoire    croatia         
##  [45] cuba             cyprus           czech republic   denmark         
##  [49] djibouti         dominica         dominican rep    ecuador         
##  [53] egypt            el salvador      equ. guinea      eritrea         
##  [57] estonia          ethiopia         fiji             finland         
##  [61] france           gabon            gambia           georgia         
##  [65] germany          ghana            greece           grenada         
##  [69] guatemala        guinea           guinea-bissau    guyana          
##  [73] haiti            honduras         hungary          iceland         
##  [77] india            indonesia        iran             iraq            
##  [81] ireland          israel           italy            jamaica         
##  [85] japan            jordan           kazakhstan       kenya           
##  [89] kiribati         kuwait           kyrgyzstan       laos            
##  [93] latvia           lebanon          lesotho          liberia         
##  [97] libya            lithuania        luxembourg       madagascar      
## [101] malawi           malaysia         maldives         mali            
## [105] malta            marshall isl.    mauritania       mauritius       
## [109] mexico           micronesia       moldova          monaco          
## [113] mongolia         morocco          mozambique       myanmar         
## [117] namibia          nauru            nepal            netherlands     
## [121] new guinea       new zealand      nicaragua        niger           
## [125] nigeria          niue             north korea      norway          
## [129] oman             pakistan         palau            panama          
## [133] paraguay         peru             philippines      poland          
## [137] portugal         qatar            rep of congo     romania         
## [141] russia           rwanda           saint lucia      saint vincent   
## [145] samoa            san marino       sao tome         saudi arabia    
## [149] senegal          serbia/monten    seychelles       sierra leone    
## [153] singapore        slovakia         slovenia         solomon isl.    
## [157] somalia          south africa     south korea      spain           
## [161] sri lanka        st. kitts        sudan            suriname        
## [165] swaziland        sweden           switzerland      syria           
## [169] tajikistan       tanzania         thailand         timor-leste     
## [173] togo             tonga            trinidad/tob.    tunisia         
## [177] turkey           turkmenistan     tuvalu           uganda          
## [181] ukraine          united kingdom   united states    uruguay         
## [185] uzbekistan       vanuatu          venezuela        viet nam        
## [189] yemen            zambia           zimbabwe        
## 191 Levels: afghanistan albania algeria andorra angola ... zimbabwe
cancer[1, 2]  #accedemos a la segunda variable del caso 1
## [1] 2.6
cancer[1:4, ]  #ofrece informacion desde la fila 1 hasta la fila 4. Incluye todas las columnas
##          pais cervical colon.recto esofago higado leucemia mama oral
## 1 afghanistan      2.6         6.5     9.7    3.8      5.3 14.2  2.0
## 2     albania      1.5         7.1     2.4    6.7      5.7 18.4  4.6
## 3     algeria      3.4         8.5     0.5    1.3      2.9 16.9  3.5
## 4     andorra      0.8        14.3     2.5    4.9      3.8 15.5  2.9
##   ovario pancreas pulmon vejiga gdpcapita region
## 1    1.0      2.3    7.2    4.3       586 menaga
## 2    1.6      8.9   31.0    3.8     4.042 europe
## 3    1.7      1.3   10.6    5.0     5.523 menaga
## 4    1.9      4.6   21.6    4.2    41.517 europe
cancer[1:3, 1:2]  #da informacion sobre las dos primeras columnas, tres primeros casos
##          pais cervical
## 1 afghanistan      2.6
## 2     albania      1.5
## 3     algeria      3.4

Podemos ahora que hemos visto que hay en la tabla de datos, podemos operar a lo interno de la tabla:

disponibilidad$años[disponibilidad$año < 2000]  # de la variable años, todos los que son menores a 2000
## [1] 1996 1997 1998 1999
disponibilidad$años[disponibilidad$año > 2000]  # de la variable años, todos los que son mayores a 2000
## [1] 2001 2002 2003 2004 2005 2006

Para cambiar un valor dentro de un data.frame

disponibilidad$precios[3] <- 2420  #queremos cambiar el valor de la tercera celda de la columna precio

Mediana, na.rm suprime la contabilizacion de los valores faltantes, con variables numericas se ingresa na.omit:

median(table(as$partido), na.rm = T)

podemos obtener informacion rapida sobre la distribucion de los niveles o factores de una variable mediante la funcion table()

table(cancer$region)
## 
##       aao      asia        ca caribbean    europe    menaga        na 
##        16        27         7        14        44        23         2 
##        sa       ssa 
##        12        46

Para cambiar los nombres de los factores existentes en una variable dada usamos:

cancer$region<-factor(cancer$region, levels=c("A", "B"", "C"", "D"", "E""))

No hay comentarios: