Для циклов в R с добавленными именами для i - PullRequest
1 голос
/ 06 апреля 2020

У меня были некоторые проблемы с добавлением заголовков к созданным фреймам данных с циклами for. Это базовая c структура данных:

> head(year2019)
        date day_of_week away_team away_team_game_number home_team home_team_game_number away_score home_score day_night  park game_length away_AB away_H away_2B
1 2019-03-20         Wed       SEA                     1       OAK                     1          9          7         N OAK01         204      31      7       1
2 2019-03-21         Thu       SEA                     2       OAK                     2          5          4         N OAK01         267      43      9       4
3 2019-03-28         Thu       PIT                     1       CIN                     1          3          5         D CIN09         174      31      5       0
4 2019-03-28         Thu       ARI                     1       LAN                     1          5         12         D LOS03         169      33      9       4
5 2019-03-28         Thu       COL                     1       MIA                     1          6          3         D MIA02         175      36      9       5
6 2019-03-28         Thu       SLN                     1       MIL                     1          4          5         D MIL06         156      32      5       0

С помощью этого кода я смог создать кадры данных для каждой команды:

for (i in teams) {
  assign(i, year2019 %>% filter(away_team == i | home_team == i))
}

С teams <- c("ANA", "ARI", "ATL", ...)

Однако я хочу запустить это с созданием как домашних, так и выездных команд. Я пробовал кое-что из следующего, но пока ничего не получалось:

for(i in teams) { 
  i_home <- i %>% filter(home_team == i)
  i_away <- i %>% filter(away_team == i)
}

Или

for (i in teams) {
  i1 <- filter(year2019, home_team == i)
  i2 <- filter(year2019, away_team == i)
}

Любой совет, как правильно вводить добавленные имена для i в этом?

1 Ответ

0 голосов
/ 06 апреля 2020

Избегайте переполнения вашей глобальной среды с помощью множества отдельных кадров данных команды. Вместо этого используйте один список много элементов фрейма данных, который легко индексируется и доступен для поиска. Для этого рассмотрим by или split.

home_team_dfs <- by(year_2019, year_2019$home_team, identity)
home_team_dfs <- split(year_2019, year_2019$home_team)

# RUN SELECT OPERATIONS ON DATA FRAMES
head(home_team_dfs$ANA)
tail(home_team_dfs$ARI)
summary(home_team_dfs$ATL)


away_team_dfs <- by(year_2019, year_2019$away_team, identity)
away_team_dfs <- split(year_2019, year_2019$away_team)

# RUN SELECT OPERATIONS ON DATA FRAMES
head(away_team_dfs$ANA)
tail(away_team_dfs$ARI)
summary(away_team_dfs$ATL)

Обратите внимание, что вы не потеряете функциональность фрейма данных, если он хранится в списке. Поэтому любая необходимая операция (например, head, tail, summary) все еще должна быть доступна. Кроме того, вы можете легко выполнять итеративные, последовательные, последовательные операции над списком, например, с помощью применять функции семейства для взаимодействия с одним, несколькими или всеми базовыми элементами фрейма данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...