Chapter 11 Collapsing
Datentabellen subgruppenspezifisch verdichten (collapse) oder den (Sub-)Gruppenwert für jede einzelne Beobachtung erzeugen.
11.1 Base R:
require(tidyverse)
<- readr::read_tsv("https://md.psych.bio.uni-goettingen.de/mv/data/div/df_dplyr.txt") dd
## Rows: 12 Columns: 7
## ── Column specification ─────────────────────────────────────────────────────────────────────────────────────────────
## Delimiter: "\t"
## chr (1): gender
## dbl (6): subj, age, grp, v1, v2, v3
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# we would like to know the mean of the fun for every gender or group
# using tapply()
<- tapply(dd$v1, dd$gender, mean)
s_means $ms_v1 <- s_means[dd$gender]
dd
<- tapply(dd$v1, dd$grp, mean)
g_means $mg_v1 <- g_means[dd$grp]
dd
# using a for loop and insert value for every observation
for(i in unique(dd$gender)){
$ms_v1[dd$gender == i] <- mean(dd$v1[dd$gender == i])
dd
}
for(i in unique(dd$grp)){
$mgr_v1[dd$grp == i] <- mean(dd$v1[dd$grp == i])
dd }
## Warning: Unknown or uninitialised column: `mgr_v1`.
11.2 Tidyverse: dplyr::group_by()
Mit dplyr::group_by()
wird eine Datentabelle (tibble) aufgeteilt in Subgruppen von Beobachtungen.
Alle Berechnungen danach werden für jede Subgruppe separat durchgeführt.
Wenn wir an Stelle von dplyr::summarize()
das dplyr::mutate()
benutzen, wird der ermittelte (Sub-)Gruppenwert für jede einzelne Beobachtung eingetragen
require(tidyverse)
<- readr::read_tsv("https://md.psych.bio.uni-goettingen.de/mv/data/div/df_dplyr.txt") dd
## Rows: 12 Columns: 7
## ── Column specification ─────────────────────────────────────────────────────────────────────────────────────────────
## Delimiter: "\t"
## chr (1): gender
## dbl (6): subj, age, grp, v1, v2, v3
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# gender specific collapsing
%>% dplyr::group_by(gender) %>% dplyr::summarize(ms_v1 = mean(v1)) dd
## # A tibble: 2 × 2
## gender ms_v1
## <chr> <dbl>
## 1 f 48.7
## 2 m 55.5
# gender specific values, keeping observations
%>% dplyr::group_by(gender) %>% dplyr::summarize(ms_v1 = mean(v1)) dd
## # A tibble: 2 × 2
## gender ms_v1
## <chr> <dbl>
## 1 f 48.7
## 2 m 55.5
# grp specific values collapsing
%>% dplyr::group_by(grp) %>% dplyr::summarize(mg_v1 = mean(v1)) dd
## # A tibble: 3 × 2
## grp mg_v1
## <dbl> <dbl>
## 1 1 43.8
## 2 2 47.5
## 3 3 65
# gender specific values, keeping observations
%>% dplyr::group_by(grp) %>% dplyr::mutate(mg_v1 = mean(v1)) dd
## # A tibble: 12 × 8
## # Groups: grp [3]
## subj gender age grp v1 v2 v3 mg_v1
## <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 f 17 1 9 16 8 43.8
## 2 2 f 33 2 67 73 66 47.5
## 3 3 f 47 3 86 87 91 65
## 4 4 f 10 1 64 68 67 43.8
## 5 5 f 21 2 40 46 44 47.5
## 6 6 f 30 3 26 34 28 65
## 7 7 m 51 1 64 66 64 43.8
## 8 8 m 13 2 61 66 64 47.5
## 9 9 m 17 3 67 67 67 65
## 10 10 m 25 1 38 36 35 43.8
## 11 11 m 33 2 22 25 21 47.5
## 12 12 m 27 3 81 86 81 65
11.3 Referenzen
Beispiele und Erklärungen: Unit transformation base
Beispiele und Erklärungen: Unit transformation dplyr