Извлечение информации из строки на основе двух разных столбцов - PullRequest
0 голосов
/ 16 сентября 2018

У меня есть набор данных, который выглядит примерно так:

ID           Name            Age           Medal         Country
1            Dimitrios       10            Bronze        GRE
2            Oumar           30            NA            SEN
3            Toivo           25            Gold          FIN

Что я хотел бы сделать, это извлечь информацию (имя + возраст + страна) самого молодого спортсмена, который выиграл медаль (бронза), Серебро и золото).

Возможно ли это?Если да, то не могли бы вы мне помочь, как мне это сделать?

1 Ответ

0 голосов
/ 16 сентября 2018

Чтобы получить самого молодого спортсмена, который выиграл медаль X за X в {бронза, серебро, золото}, вот один из способов, используя dplyr::.

library(dplyr)

# make some fake data 
dat <- data.frame(
  ID = 1:7, 
  Name = c("a","b","c","d","e","f","g"),
  Age = c(10, 15, 20, 25, 30, 35, 40), 
  Medal = c("bronze","bronze","silver","silver","gold","gold",NA),
  Country = c("GRE","SEN","FIN","USA","GRE","USA","FIN"))

# get just the rows where the person is the youngest to win their medal type:
dat %>% group_by(Medal) %>% 
  filter(Age == min(Age)) %>% ungroup()

## output will look like this:
## 
##    ID Name   Age  Medal   Country
##     1  a      10  bronze  GRE    
##     3  c      20  silver  FIN    
##     5  e      30  gold    GRE    
##     7  g      40  NA      FIN    

Это также вернет самого молодого человека с NA в качестве значения в $Medal.Чтобы просто получить информацию о трех победителях медали и игнорировать NA с, просто filter() сначала данные:

dat %>% 
  filter(!is.na(Medal)) %>% 
  group_by(Medal) %>% 
  filter(Age == min(Age)) %>% ungroup()

Или, если вы просто хотите получить информацию о самом молодом человеке, который когда-либо выигрывал любая медаль, тогда вы можете просто отфильтровать данные напрямую (т.е. без группировки сначала по $Medal):

dat %>% 
  filter(!is.na(Medal)) %>% 
  filter(Age == min(Age))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...