Bin/categorise R 中的 p 值
Bin/categorise p values in R
我如何在 R 中创建一个函数来按如下方式转换我的 p 值?
If p>0.05 -> ns
If p<0.05 -> 1
If p<10-2 -> 2
If p<10-3 -> 3
If p<10-4 -> 4
etc...
我们可以使用case_when
做一个自定义类别
library(dplyr)
f1 <- function(pval) {
case_when(pval > 0.5 ~ 'ns',
pval < 1e-4 ~ '4',
pval < 1e-3 ~ '3',
pval < 1e-2 ~ '2',
pval < 0.05 ~ '1'
)
}
f1(c(0.04, 1.2, 0.00005))
#[1] "1" "ns" "4"
如果您只想降低到 10e-4,@akrun 的回答很好。一个更通用的解决方案,可以像下面这样:
# from here:
roundUp <- function(x) 10^ceiling(log10(x))
categorize_p = function(ps) {
logged = -log10(roundUp(ps))
logged[ps > .05] = "ns"
return(logged)
}
categorize_p(c(.1,.049, .001, .01))
#[1] "ns" "1" "3" "2"
我如何在 R 中创建一个函数来按如下方式转换我的 p 值?
If p>0.05 -> ns
If p<0.05 -> 1
If p<10-2 -> 2
If p<10-3 -> 3
If p<10-4 -> 4
etc...
我们可以使用case_when
做一个自定义类别
library(dplyr)
f1 <- function(pval) {
case_when(pval > 0.5 ~ 'ns',
pval < 1e-4 ~ '4',
pval < 1e-3 ~ '3',
pval < 1e-2 ~ '2',
pval < 0.05 ~ '1'
)
}
f1(c(0.04, 1.2, 0.00005))
#[1] "1" "ns" "4"
如果您只想降低到 10e-4,@akrun 的回答很好。一个更通用的解决方案,可以像下面这样:
# from here:
roundUp <- function(x) 10^ceiling(log10(x))
categorize_p = function(ps) {
logged = -log10(roundUp(ps))
logged[ps > .05] = "ns"
return(logged)
}
categorize_p(c(.1,.049, .001, .01))
#[1] "ns" "1" "3" "2"