Построение вектора имен из фрейма данных с использованием R

#r #vector

#r #вектор

Вопрос:

У меня есть большой фрейм данных, который содержит данные о результатах спортивных матчей. Я хочу попытаться извлечь конкретные данные из фрейма данных в зависимости от определенных критериев. Вот краткий пример того, что я имею в виду… Представьте, что у меня есть фрейм данных df, который отображает данные о конкретных футбольных матчах турнира в каждой строке, например:

    Winner_Teams Win_Capt_Nm Win_Country Loser_teams Lose_Capt_Nm Lose_Country
1      Man utd        John     England   Barcalona       Carlos        Spain
2    Liverpool       Steve     England    Juventus        Mario        Italy
3      Man utd        John    Scotland    R Madrid         Juan        Spain
4     Paris SG      Teirey      France     Chelsea         Mark      England
  

Так, например, в строке [1] «Манчестер Юнайтед» выиграл у «Баркалоны», капитана «Манчестер Юнайтед» звали Джон, и он из Англии. Капитана «Баркалоны» (проигравших в матче) звали Карлос, и он из Испании.

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

 [1] "John"  "Mark"  "Steve"
  

Вот что я пробовал до сих пор…
Моим первым шагом было создание фрейма данных, который отбрасывает все совпадения, у которых нет английских капитанов

 > England_player <- data.frame(filter(df, Win_Country=="England" ))
> England_player

 Winner_Teams Win_Capt_Nm Win_Country Loser_teams Lose_Capt_Nm Lose_Country
1      Man utd        John     England   Barcalona       Carlos        Spain
2    Liverpool       Steve     England    Juventus        Mario        Italy
3     Paris SG      Teirey      France     Chelsea         MArk      England
  

Затем я использовал select() в England_player, чтобы выделить только имена:

 > England_player_names <- select(England_player, Win_Capt_Nm, Lose_Capt_Nm)
> England_player_names

  Win_Capt_Nm Lose_Capt_Nm
1        John       Carlos
2       Steve        Mario
3      Teirey         Mark
  

И тогда я застрял! Как вы можете видеть, на выходе отображается имя победителя на английском языке и имя его противника… это не то, что я хочу!
Легко просто прочитать имена из этого фрейма данных .. но фрейм данных, с которым я работаю, большой, поэтому просто чтение значений бесполезно!
Любые предложения относительно того, как я это сделаю?

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

1. Похоже, вам нужно объединить два подмножества — Win_Capt_Nm when Win_Country — Англия и Lose_Cpt_Nm when Lose_Country — Англия. Извлеките каждый вектор отдельно, используйте c() для их объединения.

2. В остальном это хороший вопрос, но, пожалуйста, не забудьте поделиться своими данными dput() при использовании тега R. Наведите указатель мыши на r тег для получения дополнительной информации.

3. Я думаю, вам нужно сделать два подмножества: сначала вы выбираете страну победы = Англию и получаете имена игроков. Затем вы подмножествуете на lose country = England и делаете то же самое. Наконец, вы объединяете два списка с помощью rbind,. Однако это может привести к дублированию, которое yoi может удалить с помощью ‘uniq’

Ответ №1:

 english.players <- union(data$Win_Capt_Nm[data$Win_Country == 'England'], data$Lose_Capt_Nm[data$Lose_Country == 'England'])

[1] "John"  "Steve" "Mark" 
  

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

1. Это идеально! Я только что обнаружил команду union(), и она мне уже нравится! Спасибо!

2. Обратите внимание, что использование union удалит любые дублирующиеся имена. Чтобы сохранить дубликаты, сделайте c() вместо union() .