Как разделить строки для тиббла

#r

Вопрос:

Я пытаюсь создать проект по сбору данных со спортивными командами, и мне было интересно, есть ли способ, которым я мог бы взять обычный текст и превратить его в тиббл с данными, разделенными на город и талисман.

 tibble("City, Mascot,
  Arizona Diamondbacks
  Atlanta Braves
  Baltimore Orioles
  Boston Red Sox
  Chicago White Sox
  Chicago Cubs
  Cincinnati Reds
  Cleveland Indians
  Colorado Rockies
  Detroit Tigers
  Houston Astros
  Kansas City Royals
  Los Angeles Angels
  Los Angeles Dodgers
  Miami Marlins
  Milwaukee Brewers
  Minnesota Twins
  New York Yankees
  New York Mets
  Oakland Athletics
  Philadelphia Phillies
  Pittsburgh Pirates
  San Diego Padres
  San Francisco Giants
  Seattle Mariners
  St. Louis Cardinals
  Tampa Bay Rays
  Texas Rangers
  Toronto Blue Jays
  Washington Nationals
  "
)
 

В принципе, я могу редактировать код так, чтобы мне не приходилось вручную изменять каждый из них вручную, но при необходимости я могу внести небольшие коррективы. Я делаю это для того, чтобы объединить его с другими данными по городам.

Комментарии:

1. Копирование ваших данных дает 1 кадр данных строки с каким-то странным именем столбца. Вы уверены, что данные верны ? Можете ли вы включить ожидаемый результат для данных ?

Ответ №1:

Немного черной магии регулярных выражений

 library(tidyverse)


example_data <- tibble::tribble(
                    ~data,
   "Arizona Diamondbacks",
         "Atlanta Braves",
      "Baltimore Orioles",
         "Boston Red Sox",
      "Chicago White Sox",
           "Chicago Cubs",
        "Cincinnati Reds",
      "Cleveland Indians",
       "Colorado Rockies",
         "Detroit Tigers",
         "Houston Astros",
     "Kansas City Royals",
     "Los Angeles Angels",
    "Los Angeles Dodgers",
          "Miami Marlins",
      "Milwaukee Brewers",
        "Minnesota Twins",
       "New York Yankees",
          "New York Mets",
      "Oakland Athletics",
  "Philadelphia Phillies",
     "Pittsburgh Pirates",
       "San Diego Padres",
   "San Francisco Giants",
       "Seattle Mariners",
    "St. Louis Cardinals",
         "Tampa Bay Rays",
          "Texas Rangers",
      "Toronto Blue Jays",
   "Washington Nationals"
  )


example_data |> 
  mutate(city = str_remove(data,'[[:alpha:]] 

Создано в 2021-10-18 годах пакетом reprex (v2.0.1)


Комментарии:

1. Это не идеально, потому что иногда это Сент-Луис или Уайт Сокс, я не могу придумать правило, чтобы решить, какая часть принадлежит городу, а какая принадлежит талисману, я выбираю последнее слово, чтобы быть талисманом...

2. Если бы у вас был список названий городов, вы могли бы проверить данные на наличие названий городов и разбить их таким образом? ВОЗМОЖНО, НАМНОГО МЕДЛЕННЕЕ, но, может быть, это не слишком большое

3. Да, вы можете это сделать, я не думаю, что скорость имеет значение, в большинстве случаев это всегда будет глупо быстро до такой степени, что она может работать в 1000 раз медленнее

4. @Bruno Как быстро добавить запятые в конце каждой строки? Я не очень хорошо знаком с регулярными выражениями.

) |> str_trim(),
macot = str_extract(data,'[[:alpha:]]Создано в 2021-10-18 годах пакетом reprex (v2.0.1)

Комментарии:

1. Это не идеально, потому что иногда это Сент-Луис или Уайт Сокс, я не могу придумать правило, чтобы решить, какая часть принадлежит городу, а какая принадлежит талисману, я выбираю последнее слово, чтобы быть талисманом...

2. Если бы у вас был список названий городов, вы могли бы проверить данные на наличие названий городов и разбить их таким образом? ВОЗМОЖНО, НАМНОГО МЕДЛЕННЕЕ, но, может быть, это не слишком большое

3. Да, вы можете это сделать, я не думаю, что скорость имеет значение, в большинстве случаев это всегда будет глупо быстро до такой степени, что она может работать в 1000 раз медленнее

4. @Bruno Как быстро добавить запятые в конце каждой строки? Я не очень хорошо знаком с регулярными выражениями.

))
#> # A tibble: 30 x 3
#> data city macot
#> <chr> <chr> <chr>
#> 1 Arizona Diamondbacks Arizona Diamondbacks
#> 2 Atlanta Braves Atlanta Braves
#> 3 Baltimore Orioles Baltimore Orioles
#> 4 Boston Red Sox Boston Red Sox
#> 5 Chicago White Sox Chicago White Sox
#> 6 Chicago Cubs Chicago Cubs
#> 7 Cincinnati Reds Cincinnati Reds
#> 8 Cleveland Indians Cleveland Indians
#> 9 Colorado Rockies Colorado Rockies
#> 10 Detroit Tigers Detroit Tigers
#> # ... with 20 more rows
Создано в 2021-10-18 годах пакетом reprex (v2.0.1)

Комментарии:

1. Это не идеально, потому что иногда это Сент-Луис или Уайт Сокс, я не могу придумать правило, чтобы решить, какая часть принадлежит городу, а какая принадлежит талисману, я выбираю последнее слово, чтобы быть талисманом…

2. Если бы у вас был список названий городов, вы могли бы проверить данные на наличие названий городов и разбить их таким образом? ВОЗМОЖНО, НАМНОГО МЕДЛЕННЕЕ, но, может быть, это не слишком большое

3. Да, вы можете это сделать, я не думаю, что скорость имеет значение, в большинстве случаев это всегда будет глупо быстро до такой степени, что она может работать в 1000 раз медленнее

4. @Bruno Как быстро добавить запятые в конце каждой строки? Я не очень хорошо знаком с регулярными выражениями.