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

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的价值回归最年轻的人。要获得三个奖牌获得者的信息并忽略NAs,首先只需filter()数据:

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

或者,如果您只想获得最年轻的人获得任何奖牌的信息,那么您可以直接过滤数据(即不先通过$Medal分组):

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

以上是关于根据两个不同的列从一行中提取信息的主要内容,如果未能解决你的问题,请参考以下文章

根据来自不同数据帧的行名将列从另一个数据帧复制到

如何根据不同的 WHERE 选择一列并生成两个不同的列

根据不同的列值选择一行(同一行)[重复]

根据第三列值在 bigquery 中选择两个不同的列

Python Pandas:无法根据 groupby 在两个不同的列中返回字典

根据不同的条件对两个不同的列进行分组和求和