Один из подходов заключается в использовании пакета corrr
в сочетании с purrr::nest()
:
library(tidyverse)
library(corrr)
df <- tribble(
~year, ~V1, ~V2, ~V3, ~misc_var,
2018, 5, 6, 5, "a",
2018, 4, 6, 4, "b",
2018, 3, 2, 3, NA,
2013, 5, 8, 2, "4",
2013, 6, 3, 8, "8",
2013, 4, 7, 5, NA
)
df %>%
select_if(is.numeric) %>%
group_by(year) %>%
nest() %>%
mutate(
correlations = map(data, correlate)
) %>%
unnest(correlations)
#>
#> Correlation method: 'pearson'
#> Missing treated using: 'pairwise.complete.obs'
#>
#>
#> Correlation method: 'pearson'
#> Missing treated using: 'pairwise.complete.obs'
#> # A tibble: 6 x 5
#> year rowname V1 V2 V3
#> <dbl> <chr> <dbl> <dbl> <dbl>
#> 1 2018 V1 NA 0.866 1
#> 2 2018 V2 0.866 NA 0.866
#> 3 2018 V3 1 0.866 NA
#> 4 2013 V1 NA -0.756 0.5
#> 5 2013 V2 -0.756 NA -0.945
#> 6 2013 V3 0.5 -0.945 NA
В качестве альтернативы вы можете использовать более экспериментальные функции group_map
или group_modify
из dplyr
:
df %>%
select_if(is.numeric) %>%
group_by(year) %>%
group_map(~ correlate(.x)) # or group_modify(~ correlate(.x))