Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
高效地计算dataframe列的百分比_R_Dataframe_Quantile_Ecdf - Fatal编程技术网

高效地计算dataframe列的百分比

高效地计算dataframe列的百分比,r,dataframe,quantile,ecdf,R,Dataframe,Quantile,Ecdf,此问题是所问和回答的StackOverflow问题的扩展 我的情况不同,我想计算50000(或更多!)个值的向量中每个值的百分比。比如说-- df您可以实现dplyr::percent_rank根据百分比对每个值进行排序 df.per <- df %>% mutate(val.percentile = percent_rank(val)) 我最初的答复是: t <- proc.time() df <- df %>% mutate(val.percent

此问题是所问和回答的StackOverflow问题的扩展

我的情况不同,我想计算50000(或更多!)个值的向量中每个值的百分比。比如说--


df您可以实现
dplyr::percent_rank
根据百分比对每个值进行排序

df.per <- df %>% 
  mutate(val.percentile = percent_rank(val))
我最初的答复是:

t <- proc.time()
df <- df %>% 
  mutate(val.percentile = percent_rank(val))
proc.time() - t
@第42条的答复:

t <- proc.time()
df$val.percentile.2 <- ecdf(df$val)(df$val)
proc.time() - t

因此,显然,
ecdf
在给定的上下文中执行得更好。
val.percentile
val.percentile.2
的结果几乎相同。

ecdf
已经矢量化,没有理由使用
应用
功能。您只需运行:

df$val.percentile <- ecdf(df$val)(df$val)

df$val.percentile这个答案和我的有什么不同?@42-不是,但你和巴克几乎同时发布(巴克是第一个)嗯,我发布(或编辑)时没有看到它。我想是晚些时候。
 user  system elapsed 
2.484   0.068   2.554 
t <- proc.time()
df$val.percentile.2 <- ecdf(df$val)(df$val)
proc.time() - t
 user  system elapsed 
1.048   0.004   1.048
df$val.percentile <- ecdf(df$val)(df$val)