R 列表中的百分位
我有以下清单(h): 我想添加一个新的列来计算列表中每个数字的百分比。 我尝试使用以下命令,但出现错误: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
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