Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.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
有没有办法让R计算我的csv文件来显示百分位数?_R_Rstudio_Rscript - Fatal编程技术网

有没有办法让R计算我的csv文件来显示百分位数?

有没有办法让R计算我的csv文件来显示百分位数?,r,rstudio,rscript,R,Rstudio,Rscript,我尝试过使用分位数函数,但它没有达到预期效果,我已经没有选择了,所以我向你的R大师寻求帮助 假设我们找到了P50,在这里我提到了百分位数 一个示例数据集是 Date data 2020-01-01 49.5 2020-02-01 49.7 2020-03-14 48.5 2020-05-02 50.2 我试图让脚本使用前面的列生成百分位输出 Date data V1 V2

我尝试过使用分位数函数,但它没有达到预期效果,我已经没有选择了,所以我向你的R大师寻求帮助

假设我们找到了P50,在这里我提到了百分位数

一个示例数据集是

  Date           data
  2020-01-01      49.5
  2020-02-01      49.7
  2020-03-14      48.5
  2020-05-02      50.2
我试图让脚本使用前面的列生成百分位输出

  Date           data    V1     V2      V3
  2020-01-01      49.5   49.6   49.6    49.5625
  2020-02-01      49.7   49.7   49.525
  2020-03-14      48.5   49.35
  2020-05-02      50.2
这在V1中试图实现的是在数据列中使用48.5和50.2找到一个百分位数,从而得出V1中的49.6,V1中的49.7应为使用50.2的百分位数结果,48.5和49.7等。V2 49.525的结果是使用V1中49.35和49.7的百分位数得出的结果,V2中49.6的结果是49.35、49.7、49.6等的百分位数,V3中49.5625的结果是使用49.525和49.6从V2中找到百分位数得出的结果

然后继续这样做,直到完成整个数据集

然后,完成此操作后,在不改变输出的情况下降低结果,从而导致:

  Date           data    V1     V2      V3
  2020-01-01      49.5   NA     NA      NA
  2020-02-01      49.7   49.6   NA      NA
  2020-03-14      48.5   49.7   49.6    NA
  2020-05-02      50.2   48.35  49.525  49.5625

这是一个不同寻常的算法。我认为当你说第45百分位数时,你的意思是这个数字的0.45倍

按照您的建议尝试移动行将非常缓慢和复杂,但您应该仍然能够迭代地获得解决方案。从你的例子中不清楚你到底想要什么(你的数字与你对数字应该发生什么的描述不匹配),但是从你对算法的描述中,这里有一个有效的解决方案。我已经包括了一个更长的数据框,这样你可以确保数字符合你的期望

df 1 2002-01-01 10不适用
#>2 2002-03-02 20 4.5不适用
#>3 2002-04-15 30 9.0 11.025不适用
#>4 2003-01-01 40 13.5 17.550 22.51125不适用
#>5 2003-03-02 50 18.0 24.075 31.97250 42.10256 NA
#> 6 2003-04-15   60 22.5 30.600 41.43375 55.82138 74.76753
请注意,在R中,与Excel不同,您不能将数字列中的单元格留空-它们将包含
NA


更新

根据来自OP的进一步信息,以下功能执行所述算法。这里,
df
是最右边一列中带有“count”的数据框,您可以放置任何您喜欢的百分比

make_percentiles <- function(df, percentile = 50)
{
  df_names <- names(df)
  percentile <- percentile/100
  f <- function(x, p) c(NA, x[-length(x)]) + p * c(NA, diff(x))
  while(length(which(!is.na(df[[length(df)]]))) > 1) 
  {
    df <- cbind(df, f(df[[length(df)]], percentile))
  }
  setNames(df, c(df_names, paste0("v", 1:(length(df) - length(df_names)))))
}

你说你想找到“第45个百分位”,但我不清楚你想计算的第45个百分位是什么。例如,
分位数(1:10,0.45)
的计算结果为
5.05
。您想计算什么来代替
1:10
<代码>分位数(c(10,20),0.45)和
分位数(c(10,20,30),0.45)
?我基本上是在尝试自动化一个我通常在excel中手动完成的过程(在excel中需要花费大量时间,平均1-2个月),只是在计算时找到每行的百分比。因此,基本上,您将获取第一列,复制该列,在其旁边的空列中上移一行并粘贴。然后移到它旁边的列,向上一行,让Excel逐行查找要查找的百分比。在到达数据集的开始日期之前,您可以每隔一段时间执行此操作。谢谢!这个百分位数是一个随机的百分位数,我把它和数字一起作为一个例子,但这看起来可能有用。我会尝试一下。所以我尝试了上面的方法,但没有达到预期效果,我想我有一个更好的例子向您展示,我已经更新了问题来展示它。@Island868很抱歉,即使有您的更新,我也不明白。当您说“在数据列中使用48.5和50.2查找百分位,得到48.4”时。这是什么意思?你是如何从48.5和50.2中得到48.4的?这是一个怎样的百分位数?我以它为例,假设它是中位数(P50),所以基本上当我说这个百分位数时,让我们假设数据列中的P50为48.5和50.2,结果为48.4(我知道这不是实际的P50)。顺便说一句,如果我真的在excel中计算了一个P50,并用实际的数字替换这个例子,这会更有帮助吗?使用excel中的百分位数函数对数字进行了更新以获得它们。
make_percentiles(df, 50)
#>         Date data    v1     v2      v3
#> 1 2020-01-01 49.5    NA     NA      NA
#> 2 2020-02-01 49.7 49.60     NA      NA
#> 3 2020-03-14 48.5 49.10 49.350      NA
#> 4 2020-05-02 50.2 49.35 49.225 49.2875

make_percentiles(df, 45)
#>         Date data     v1       v2       v3
#> 1 2020-01-01 49.5     NA       NA       NA
#> 2 2020-02-01 49.7 49.590       NA       NA
#> 3 2020-03-14 48.5 49.160 49.39650       NA
#> 4 2020-05-02 50.2 49.265 49.20725 49.31134