-
Notifications
You must be signed in to change notification settings - Fork 5
/
05-dplyr.Rmd
160 lines (109 loc) · 3.57 KB
/
05-dplyr.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
## dplyr::
Los principales cinco verbos (funciones) de `dplyr` son:
`select` `filter` `mutate` `summarise` `arrange`
<br>
`select`
![](fig/dplyr_select.png)
Vamos a seleccionar las variables: study, year y fungic del archivo soja:
```{r}
soja_long %>%
select(trt, yield)
# Una selección “negativa” de las variables no deseadas daría un mismo resultado:
# soja_long %>%
# select(-bk)
```
### filter
![](fig/dplyr_filter.png)
Semejante a `subset`. Condiciones separadas por comas equivalen a `&` de `subset`.
Filtremos la variable fungicida (fungic) por el testigo (ZZ_CHECK):
```{r}
soja_long %>%
select(trt, yield) %>%
filter(trt == 'check')
```
Ahora, agreguemos el trt A al dataset filtrado:
```{r}
soja_long %>%
select(trt, yield) %>%
filter(trt %in% c("check","A"))
```
`mutate`
Permite operar sobre las columnas, modificando su naturaleza o haciendo operaciones sobre ellas (incluso generando nuevas columnas a partir de pre-existentes).
* Creación de nuevas variables (a partir de las existentes)
![](fig/dplyr_mutate_new.png)
Supongamos que queremos analizar a yield en escala de quintal (100kg = 1qq)
```{r}
soja_long %>%
mutate(yield_qq = yield/100) %>%
select(-yield)
```
```{r, include=FALSE}
# sev_arc = asin(sqrt(sev/100)),
# sev_logit = car::logit(sev, percents=TRUE),# log(sev/100/(1-sev/100)), #
# browseURL("http://strata.uga.edu/8370/rtips/proportions.html")
```
* Conversión de tipos de variables:
Ahora que hemos re-organizado los datos, queremos chequear los tipos de variables que tiene el dataset:
```{r}
str(soja_long)
soja_long %>%
mutate(yield_qq = yield/100) %>%
select(-yield) %>%
mutate_at(vars(trt, bk), as.factor) %>%
mutate_at(vars(yield_qq), as.numeric) -> soja_long1
str(soja_long1)
```
### summarise
![](fig/dplyr_summarise.png)
Generalmente acompañada de la función `group_by` la cual permite aplicar un cálculo a las observaciones agrupando por niveles de algún factor (equivale a una tabla dinámica de Excel)
![](fig/dplyr_group_by.png)
Veamos cuánto fue el rendimiento promedio y el desvío standard para cada fungicida a través de todos los ensayos:
```{r}
soja_long %>%
group_by(trt) %>%
summarise(yield_mean = mean(yield),
yield_sd = sd(yield))
```
> Calculen el rendimiento mínimo y máximo de cada tratamiento
`arrange`
Ordenar columnas
```{r}
soja_long %>%
arrange(trt, yield) %>%
print(n=Inf)
```
* Función `subset`
Filtremos a la variable Species reteniendo sólo a "setosa"
```{r}
iris_setosa <- subset(iris, Species=="setosa")
```
Filtremos a la variable Species reteniendo sólo a "setosa" + "virginica"
```{r}
iris_set.virginica <- subset(iris, Species %in% c("setosa", "virginica"))
```
Anteponiendo el `!` a la condición estaremos aplicando la negativa de la condición.
> regenere `iris_set.virginica` usando `!` para mejorar el código
Agreguemos una condición: a lo anterior quedémonos con aquellas filas en que Sepal.Length > 5
```{r}
iris2 <- subset(iris, Species %in% c("setosa", "virginica") & Sepal.Length > 5)
iris2
dim(iris2)
```
> ¿Qué pasa si cambiamos el operador `&` por `|`?
```{r}
iris3 <- subset(iris, Species %in% c("setosa", "virginica") | Sepal.Length > 5)
iris3
dim(iris3)
```
> `iris4` no es un codigo suscinto... reformulelo en iris5 para que `identical(iris4, iris5) == TRUE`
```{r}
iris4 <- subset(iris,
!(Species %in% c("setosa", "virginica") |
Sepal.Length > 5)
)
iris4
dim(iris4)
```
```{r, echo=FALSE}
iris5 <- subset(iris, Species == "versicolor" & Sepal.Length <= 5)
```