首页 > 解决方案 > 将适当的子集四分位数附加到数据集

问题描述

我正在尝试向 NBA 球员数据集添加两列。第一列将确定玩家年龄在数据集中所有玩家中的四分位数。第二个附加栏将确定单个球员的年龄在他的位置(即控球后卫、小前锋、中锋等)中的哪个四分位数。我可以使用 dplyr 包根据玩家位置计算子集年龄四分位数,但我不知道如何将其连接回原始数据集,或者这是否是正确的方法。

我已经使用 dplyr 根据位置计算子集年龄四分位数。曾尝试使用其他包,如 blurjoin,但使用它们感觉不太舒服。

#Incorporate necessary packages
library(ballr)
library(magrittr)
library(dplyr)
library(tidyverse)


#Establish full player table
players <- NBAPerGameAdvStatistics(season = 2018)

#Calculates Quartiles for Each Position

Pos_quartiles <- players %>% 
  group_by(pos) %>% 
  summarise(age = list(enframe(quantile(age, probs=c(0.25,0.5,0.75,1.0))))) %>% 
  unnest

我希望拥有包含 664 个观察值和 32 个变量的玩家数据集,其中最后两个已作为此过程的结果添加。额外的行将显示基于所有球员的球员年龄四分位数,以及基于位置的球员年龄四分位数。

标签: rdplyrdata-manipulationquartile

解决方案


我们可以使用base::cutwith quantile 来获得合适的四分位数

library(dplyr)
players %>% 
  mutate(quar_all=cut(age, breaks=c(0,quantile(age, probs=c(0.25,0.5,0.75,1.0))),labels = FALSE)) %>% 
  group_by(pos) %>% 
  mutate(quar_pos=cut(age, breaks=unique(c(0,quantile(age, probs=c(0.25,0.5,0.75,1.0)))),labels = FALSE))

请注意在我得到错误时使用的quar_posunique

cut.default(age,breaks = quantile(age, probs = c(0.25, 0.5, : 'breaks' 不是唯一的) 中的错误

uniqueDidzis Elferts在这里提出了类似的错误,因此正如 Didzis 提到的那样,预计受影响群体的四分位数会更少。


推荐阅读