根据两个不同的列从一行中提取信息
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根据两个不同的列从一行中提取信息相关的知识,希望对你有一定的参考价值。
我有一个看起来像这样的数据集:
ID Name Age Medal Country
1 Dimitrios 10 Bronze GRE
2 Oumar 30 NA SEN
3 Toivo 25 Gold FIN
我想做的是提取获得奖章的最年轻运动员(铜牌,银牌和金牌)的信息(姓名+年龄+国家)。
这可能吗?如果是这样,请你帮我解释一下我应该怎么做。
答案
为了获得最年轻的运动员,他获得了青铜,银,金的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
s,首先只需filter()
数据:
dat %>%
filter(!is.na(Medal)) %>%
group_by(Medal) %>%
filter(Age == min(Age)) %>% ungroup()
或者,如果您只想获得最年轻的人获得任何奖牌的信息,那么您可以直接过滤数据(即不先通过$Medal
分组):
dat %>%
filter(!is.na(Medal)) %>%
filter(Age == min(Age))
以上是关于根据两个不同的列从一行中提取信息的主要内容,如果未能解决你的问题,请参考以下文章