Я пытаюсь написать некоторый код для перебора списка категориальных переменных и запуска некоторой сводной статистики по каждой, но у меня возникают проблемы с распознаванием переменной в цикле for. Он пытается сгруппировать по фиктивному имени цикла for ('var' в следующем примере), а не по тому, на что он ссылается. Простой пример ниже.
library(dplyr)
cat_vars <- c('hair_color', 'skin_color', 'eye_color')
for (var in cat_vars){
starwars %>%
group_by(var) %>%
summarise(n())
}
Спасибо за помощь!
Чтобы обратиться к именам переменных, хранящимся в виде символов, используйте местоимение .data
, например: .data[[var]]
.
Как написано, ваш цикл for
не будет изменять ваши данные или производить какие-либо выходные данные. Что вы хотите, чтобы он делал? Чтобы распечатать результаты каждого цикла, добавьте print()
:
for (var in cat_vars){
starwars %>%
group_by(.data[[var]]) %>%
summarise(n()) %>%
print()
}
#> # A tibble: 13 x 2
#> hair_color `n()`
#> <chr> <int>
#> 1 auburn 1
#> 2 auburn, grey 1
#> 3 auburn, white 1
#> 4 black 13
#> 5 blond 3
#> 6 blonde 1
#> 7 brown 18
#> 8 brown, grey 1
#> 9 grey 1
#> 10 none 37
#> 11 unknown 1
#> 12 white 4
#> 13 <NA> 5
#>
#> # A tibble: 31 x 2
#> skin_color `n()`
#> <chr> <int>
#> 1 blue 2
#> 2 blue, grey 2
#> 3 brown 4
#> 4 brown mottle 1
#> 5 brown, white 1
#> 6 dark 6
#> 7 fair 17
#> 8 fair, green, yellow 1
#> 9 gold 1
#> 10 green 6
#> # ... with 21 more rows
#>
#> # A tibble: 15 x 2
#> eye_color `n()`
#> <chr> <int>
#> 1 black 10
#> 2 blue 19
#> 3 blue-gray 1
#> 4 brown 21
#> 5 dark 1
#> 6 gold 1
#> 7 green, yellow 1
#> 8 hazel 3
#> 9 orange 8
#> 10 pink 1
#> 11 red 5
#> 12 red, blue 1
#> 13 unknown 3
#> 14 white 1
#> 15 yellow 11
Created on 2022-03-17 by the reprex package (v2.0.1)
Большое спасибо! В моем цикле for гораздо больше, я просто поленился с примером, я позабочусь о том, чтобы он действительно что-то делал в будущем :)