我正在尝试为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个变量,其中最后两个是由于此过程而添加的。额外的行将根据所包括的所有玩家显示玩家的年龄四分位数,以及基于其位置的玩家年龄四分位数。
我们可以使用带有分位数的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提到的预计受影响群体的四分位数会减少。