Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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 列表中的百分位_R_List_Percentile - Fatal编程技术网

R 列表中的百分位

R 列表中的百分位,r,list,percentile,R,List,Percentile,我有以下清单(h): 我想添加一个新的列来计算列表中每个数字的百分比。 我尝试使用以下命令,但出现错误: perc.rank <- function(x, xo) length(x[x <= xo])/length(x)*100 perc.rank <- function(x) trunc(rank(x))/length(x) trunc(rank(h))/length(h) perc.rank转换为数据帧将使事情变得更简单。这里有一个解决方案 library(dpl

我有以下清单(h):

我想添加一个新的列来计算列表中每个数字的百分比。 我尝试使用以下命令,但出现错误:

perc.rank <- function(x, xo)  length(x[x <= xo])/length(x)*100


perc.rank <- function(x) trunc(rank(x))/length(x)

trunc(rank(h))/length(h)

perc.rank转换为数据帧将使事情变得更简单。这里有一个解决方案

library(dplyr)
df<-data.frame(x=rnorm(10))
df%>%mutate(percrank=rank(x)/length(x)*100)

             x percrank
1   1.56254900      100
2  -0.52554968       10
3   0.16410991       70
4   0.95150575       80
5   0.01960002       60
6  -0.22860395       30
7   1.43025012       90
8  -0.15836126       40
9  -0.01150753       50
10 -0.39064474       20
库(dplyr)
df%变异(percrank=rank(x)/长度(x)*100)
x percrank
1   1.56254900      100
2  -0.52554968       10
3   0.16410991       70
4   0.95150575       80
5   0.01960002       60
6  -0.22860395       30
7   1.43025012       90
8  -0.15836126       40
9  -0.01150753       50
10 -0.39064474       20

转换为数据帧将使事情变得更简单。这里有一个解决方案

library(dplyr)
df<-data.frame(x=rnorm(10))
df%>%mutate(percrank=rank(x)/length(x)*100)

             x percrank
1   1.56254900      100
2  -0.52554968       10
3   0.16410991       70
4   0.95150575       80
5   0.01960002       60
6  -0.22860395       30
7   1.43025012       90
8  -0.15836126       40
9  -0.01150753       50
10 -0.39064474       20
库(dplyr)
df%变异(percrank=rank(x)/长度(x)*100)
x percrank
1   1.56254900      100
2  -0.52554968       10
3   0.16410991       70
4   0.95150575       80
5   0.01960002       60
6  -0.22860395       30
7   1.43025012       90
8  -0.15836126       40
9  -0.01150753       50
10 -0.39064474       20

首先将列表转换为向量,如下所示,可以更有效地完成此操作:

h <- unlist(h)

即使号码不在您的列表中,这也会起作用。例如perc.rank(0.91)应该为您提供0.91的百分位数,您还可以向perc.rank(c(0.950,0.913,0.6))之类的函数传递多个数字。

您可以通过首先将列表转换为向量来更有效地执行此操作,如下所示:

h <- unlist(h)

即使号码不在您的列表中,这也会起作用。例如,perc.rank(0.91)应该为您提供0.91的百分位数,您还可以将多个数字传递给perc.rank(c(0.950,0.913,0.6))

这将向当前列表添加两个列表元素
h

第二个列表元素是您拥有的百分比

第三个列表元素是序号

h <- list(.9613971, .9705882, .9503676, .9632353, .9779412, .9852941, .9852941, .9816176)

# create percentiles
rnk1 <- rank(unlist(h)) / length(h)

# ordinal rank
rnk2 <- rank(unlist(rnk1))

# combine the original lists with the two additional elements
res <- mapply(c, h, rnk1, rnk2, SIMPLIFY=FALSE)
res
[[1]]
[1] 0.9613971 0.2500000 2.0000000

[[2]]
[1] 0.9705882 0.5000000 4.0000000

[[3]]
[1] 0.9503676 0.1250000 1.0000000

[[4]]
[1] 0.9632353 0.3750000 3.0000000

[[5]]
[1] 0.9779412 0.6250000 5.0000000

[[6]]
[1] 0.9852941 0.9375000 7.5000000

[[7]]
[1] 0.9852941 0.9375000 7.5000000

[[8]]
[1] 0.9816176 0.7500000 6.0000000

h这将向当前列表添加两个列表元素
h

第二个列表元素是您拥有的百分比

第三个列表元素是序号

h <- list(.9613971, .9705882, .9503676, .9632353, .9779412, .9852941, .9852941, .9816176)

# create percentiles
rnk1 <- rank(unlist(h)) / length(h)

# ordinal rank
rnk2 <- rank(unlist(rnk1))

# combine the original lists with the two additional elements
res <- mapply(c, h, rnk1, rnk2, SIMPLIFY=FALSE)
res
[[1]]
[1] 0.9613971 0.2500000 2.0000000

[[2]]
[1] 0.9705882 0.5000000 4.0000000

[[3]]
[1] 0.9503676 0.1250000 1.0000000

[[4]]
[1] 0.9632353 0.3750000 3.0000000

[[5]]
[1] 0.9779412 0.6250000 5.0000000

[[6]]
[1] 0.9852941 0.9375000 7.5000000

[[7]]
[1] 0.9852941 0.9375000 7.5000000

[[8]]
[1] 0.9816176 0.7500000 6.0000000

h您的数据必须在列表中吗?Dataframe或datatable可能更容易使用。Hi Heroka,可以将数据转换为另一种类型的数据结构,如Dataframe。然而,它的来源是列表,所以最好留在列表中。但是正如我所说的,dataframe已经足够好了,您应该提供列表元素的结构。在这里,它们似乎是
vector
s,没有列。您的数据必须在列表中吗?Dataframe或datatable可能更容易使用。Hi Heroka,可以将数据转换为另一种类型的数据结构,如Dataframe。然而,它的来源是列表,所以最好留在列表中。但是正如我所说的,dataframe已经足够好了,您应该提供列表元素的结构。在这里,它们似乎是
vector
s,没有列。谢谢FelixNNelson。如果我在列表中有数字(位置)(如3),我怎么知道这个数字(位置)的百分位数是多少?@Avi假设数字位置是3,并且您的列表位于一个名为h的变量中,那么要获得h的第三个元素的百分位数,请执行perc.rank(h[[3]])。谢谢FelixNNelson。如果我在列表中有数字(位置)(如3),我怎么知道这个数字(位置)的百分位数是多少?@Avi假设数字位置是3,并且您的列表在一个名为h的变量中,那么要获得h的第三个元素的百分位数,请执行perc.rank(h[[3]])。而不是dfInstead do df
perc.rank <- function(x, xo) {
  x[[match(xo, sapply(x, "[[", 1))]]
}

perc.rank(res, .9779412)   
[1] 0.9779412 0.6250000 5.0000000