我有一个看起来像这样的数据集:
ID Name Age Medal Country
1 Dimitrios 10 Bronze GRE
2 Oumar 30 NA SEN
3 Toivo 25 Gold FIN
我想做的是提取获得奖牌(铜牌,银牌和金牌)的最年轻运动员的信息(姓名+年龄+国家)。
这可能吗?如果是这样,请您帮我解决一下。
答案 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))