#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
whenWin_Country
— Англия иLose_Cpt_Nm
whenLose_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()
.