我想将一些数值转换为因子。转换将取决于数字输入的值。
例如,假设我们有一个名为ex
的数据框和一个名为tmp
的转换框。如果p值低于某个限度,则返回相应的因子。
ex <- data.frame(pval = c(0.002, 0.3, 0.02, 0.00005, 0.09))
tmp <- data.frame(sign = c("***", "**", "*", "+", "ns"), lim = c(.001, .01, .05, .1, 1))
对于pval
中的每个ex
值,我想在sign
中获得正确的tmp
,但我不确定如何在不使用继承的情况下执行此操作ifelse
。
期望的输出:
data.frame(pval = c(0.002, 0.3, 0.02, 0.00005, 0.09),
res = c("**", "ns", "*", "***", "+"))
答案 0 :(得分:3)
这可以通过专门为此目的而设计的相当模糊的基本R函数来完成,symnum
:
ex$cond <- symnum(ex$pval, symbols=c("***", "**", "*", "+", "ns"),
cutpoints=c(0, .001, .01, .05, .1, 1.1))
返回
ex
pval cond
1 2e-03 **
2 3e-01 ns
3 2e-02 *
4 5e-05 ***
5 9e-02 +
此外,基本R函数cut
在这里完全正常。
ex$cond <- cut(ex$pval, labels=c("***", "**", "*", "+", "ns"),
breaks=c(0, .001, .01, .05, .1, 1.1))
ex
pval cond
1 2e-03 **
2 3e-01 ns
3 2e-02 *
4 5e-05 ***
5 9e-02 +
答案 1 :(得分:1)
您可以使用data.table
中的滚动加入:
setDT(ex, key="pval")
setDT(tmp, key="lim")
tmp[ex, roll=-Inf]
sign lim
1: *** 0.00005
2: ** 0.00200
3: * 0.02000
4: + 0.09000
5: ns 0.30000