R 使用ecdf图形中的值创建表
我试图使用ecdf图中的值创建一个表。我在下面重新创建了一个示例 #Data data(mtcars) #Sort by mpg mtcars <- mtcars[order(mtcars$mpg),] #Make arbitrary ranking variable based on mpg mtcars <- mtcars %>% mutate(Rank = dense_rank(mpg)) #Make variable for percent picked mtcars <- mutate(mtcars, Percent_Picked = Rank/max(mtcars$Rank)) #Make cyl categorical mtcars$cyl<-cut(mtcars$cyl, c(3,5,7,9), right=FALSE, labels=c(4,6,8)) #Make the graph ggplot(mtcars, aes(Percent_Picked, color = cyl)) + stat_ecdf(size=1) + scale_x_continuous(labels = scales::percent) + scale_y_continuous(labels = scales::percent) #资料 数据(mtcars) #按mpg排序 mtcars所以环顾四周我发现。您通过请求特定于组的ecdf值来扩展这一点,因此我们可以使用dplyr中的R 使用ecdf图形中的值创建表,r,ecdf,R,Ecdf,我试图使用ecdf图中的值创建一个表。我在下面重新创建了一个示例 #Data data(mtcars) #Sort by mpg mtcars <- mtcars[order(mtcars$mpg),] #Make arbitrary ranking variable based on mpg mtcars <- mtcars %>% mutate(Rank = dense_rank(mpg)) #Make variable for percent picked mtca
do
函数(]这样做。在比较此表和ggplot中的值时,值有一些细微的差异,我不确定这是什么原因。可能只是mtcars数据集有点小,所以如果在较大的数据集上运行,我希望它更接近实际值
#Sort by mpg
mtcars <- mtcars[order(mtcars$mpg),]
#Make arbitrary ranking variable based on mpg
mtcars <- mtcars %>% mutate(Rank = dense_rank(mpg))
#Make variable for percent picked
mtcars <- mutate(mtcars, Percent_Picked = Rank/max(mtcars$Rank))
#Make cyl categorical
mtcars$cyl<-cut(mtcars$cyl, c(3,5,7,9), right=FALSE, labels=c(4,6,8))
#Make the graph
ggplot(mtcars, aes(Percent_Picked, color = cyl)) +
stat_ecdf(size=1) +
scale_x_continuous(labels = scales::percent) +
scale_y_continuous(labels = scales::percent)
create_ecdf_vals <- function(vec){
df <- data.frame(
x = unique(vec),
y = ecdf(vec)(unique(vec))*length(vec)
) %>%
mutate(y = scale(y, center = min(y), scale = diff(range(y)))) %>%
union_all(data.frame(x=c(0,1),
y=c(0,1))) # adding in max/mins
return(df)
}
mt.ecdf <- mtcars %>%
group_by(cyl) %>%
do(create_ecdf_vals(.$Percent_Picked))
mt.ecdf %>%
summarise(q25 = y[which.max(x[x<=0.25])],
q50 = y[which.max(x[x<=0.5])],
q75 = y[which.max(x[x<=0.75])])
ggplot(mt.ecdf,aes(x,y,color = cyl)) +
geom_step()
所以环顾四周,我发现。你的方法通过询问特定于组的ecdf值来扩展这一点,因此我们可以使用dplyr中的do
函数(]这样做。在比较此表和ggplot中的值时,值有一些细微的差异,我不确定这是什么原因。可能只是mtcars数据集有点小,所以如果在较大的数据集上运行,我希望它更接近实际值
#Sort by mpg
mtcars <- mtcars[order(mtcars$mpg),]
#Make arbitrary ranking variable based on mpg
mtcars <- mtcars %>% mutate(Rank = dense_rank(mpg))
#Make variable for percent picked
mtcars <- mutate(mtcars, Percent_Picked = Rank/max(mtcars$Rank))
#Make cyl categorical
mtcars$cyl<-cut(mtcars$cyl, c(3,5,7,9), right=FALSE, labels=c(4,6,8))
#Make the graph
ggplot(mtcars, aes(Percent_Picked, color = cyl)) +
stat_ecdf(size=1) +
scale_x_continuous(labels = scales::percent) +
scale_y_continuous(labels = scales::percent)
create_ecdf_vals <- function(vec){
df <- data.frame(
x = unique(vec),
y = ecdf(vec)(unique(vec))*length(vec)
) %>%
mutate(y = scale(y, center = min(y), scale = diff(range(y)))) %>%
union_all(data.frame(x=c(0,1),
y=c(0,1))) # adding in max/mins
return(df)
}
mt.ecdf <- mtcars %>%
group_by(cyl) %>%
do(create_ecdf_vals(.$Percent_Picked))
mt.ecdf %>%
summarise(q25 = y[which.max(x[x<=0.25])],
q50 = y[which.max(x[x<=0.5])],
q75 = y[which.max(x[x<=0.75])])
ggplot(mt.ecdf,aes(x,y,color = cyl)) +
geom_step()
一个简短得多的答案,我不敢相信我之前没有看到。基本上,我只是将等于或小于.25、.5和.75的行数除以每个气缸的总行数
cyl.table<-mtcars %>%
group_by(cyl) %>%
summarise("25% Picked" = sum(Percent_Picked<=0.25)/(sum(Percent_Picked<=1)),
"50% Picked" = sum(Percent_Picked<=0.5)/(sum(Percent_Picked<=1)),
"75% Picked" = sum(Percent_Picked<=0.75)/(sum(Percent_Picked<=1)))
cyl.table
cyl.table%
组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别
总结(“25%选取”=sum(Percent_Picked一个短得多的答案,我不敢相信我之前没有看到。基本上,我只是将每个循环中等于或小于.25、.5和.75的行数除以总行数
cyl.table<-mtcars %>%
group_by(cyl) %>%
summarise("25% Picked" = sum(Percent_Picked<=0.25)/(sum(Percent_Picked<=1)),
"50% Picked" = sum(Percent_Picked<=0.5)/(sum(Percent_Picked<=1)),
"75% Picked" = sum(Percent_Picked<=0.75)/(sum(Percent_Picked<=1)))
cyl.table
cyl.table%
组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别组别
总结(“25%挑选”=总和(百分之_picked,我还应该说,如果上面的代码部分看起来很粗略,让我知道我应该做什么不同的事情!并且,我还应该说,如果上面的代码部分看起来很粗略,让我知道我应该做什么不同的事情!感谢您在这方面的帮助!我认为ecdf图中的细微差异的问题是使用f您创建的函数直到每个气缸的第一个实例之后才开始计数/累积。因此,例如,当选择第一辆4-cylander车时,y变量不会增加-它只在选择下一辆4-cylander车后开始增加。我无法找出代码中发生的情况-您知道吗?刚刚找到一个better回答-让我修改一下我在这里给你的内容。更新效果很好。我不知道layer_数据存在,谢谢!作为更新,我必须将一点Summary函数更新为q25=y[X感谢您在这方面的帮助!我认为ecdf图中的细微差异的问题在于,使用您创建的函数的ecdf图直到每个气缸的第一个实例之后才开始计数/累积。因此,例如,当选择第一辆4缸车时,y变量不会增加-它只会在之后开始增加下一辆4-cylander车被选中了。我不知道代码中发生了什么-你知道吗?刚刚找到了一个更好的答案-让我修改一下我在这里给你的东西。更新就像一个符咒。我不知道layer_数据存在,谢谢!作为更新,我必须更新一点Summary函数到q25=y[x]