根据两个不同的列从一行中提取信息

时间:2018-09-16 01:40:07

标签: r

我有一个看起来像这样的数据集:

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

我想做的是提取获得奖牌(铜牌,银牌和金牌)的最年轻运动员的信息(姓名+年龄+国家)。

这可能吗?如果是这样,请您帮我解决一下。

1 个答案:

答案 0 :(得分:1)

要获得以{青铜,银,金}的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))