将适当的子集四分位数附加到数据集

问题描述 投票:0回答:1

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

我已经使用dplyr根据位置计算子集年龄四分位数。试图使用像fuzzyjoin这样的其他软件包,但感觉不习惯使用它们。

#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个变量,其中最后两个是由于此过程而添加的。额外的行将根据所包括的所有玩家显示玩家的年龄四分位数,以及基于其位置的玩家年龄四分位数。

r dplyr data-manipulation quartile
1个回答
0
投票

我们可以使用带有分位数的base::cut来获得适当的四分位数

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_pos中我使用了unique,因为我收到了错误

cut.default中的错误(年龄,休息=分位数(年龄,probs = c)(0.25,0.5,:'break'不是唯一的

对于类似的错误,unique是由Didzis Elferts here提出的,所以Didzis提到的预计受影响群体的四分位数会减少。

© www.soinside.com 2019 - 2024. All rights reserved.